【问题标题】:Zapier - Input data sortingZapier - 输入数据排序
【发布时间】:2018-10-10 15:49:57
【问题描述】:

会发生什么:

我在我的 Shopify 商店中使用了一个非常酷的插件,它允许您按照一系列步骤自定义您的产品。

为了说明

问题是所有这些信息都没有为 Zapier 排序。本质上它显示为:

问题

它们以“Line Items Properties Values”和“Line Items Properties Names”的形式出现,粘贴时它们以数组的形式出现。

我需要做的是将这些名称与它们的值相匹配。如果可能的话,可以在 Zapier 的 GUI 中进行选择。

所以不要拥有这些字段和值

"Line Properties Names" -> "Project Title","Project Description","Ebook Type"....

"Line Items Properties Values" -> "Sherlock Holmes","A story in London..", "Standard Book"...

拥有这些字段和值:

"Project Title" -> "Sherlock Holmes"
"Project Description" -> "A story in London.."
"Ebook Type" -> "Standard Ebook"

有可能吗?

感谢您的宝贵时间

更新

为了澄清目的

所以,按照这个顺序有 3 种不同的产品。用 [] 分隔。产品中的值可能会有所不同,例如,如果客户决定不填写“项目详细信息”字段,则不会显示项目详细信息键和值。导致产品具有不同数量的键和值。

这是一个示例:(如您所见,第一个产品与第二个产品具有不同的一组值)

输入数据

Input data Values: ["1","ebook1524837342394","Ebook~~//www.shappify-cdn.com/images/282516/127828455/001_Ebook Technical 325x325 (1).png~~ebook","Technical Ebook","Technical 15K - $450.00","All Inclusive Package - $149.00","Cookbook Instant Pot"],["ebook1524837342394"],["Detective Story based in London......","Sherlock Holmes","No Addons","No Package","10000 Words - $270.00","Fiction Book","Ebook~~//www.shappify-cdn.com/images/282516/127828453/001_Ebook Standard 325x325.png~~ebook","ebook1524837304725","1","https://cdn.shopify.com/s/files/1/0012/8814/2906/uploads/7ddee14d6e5d6c5e4396981d1702c375.jpg"]

 Input data Keys: ["_master_builder","_builder_id","_builder_info","Ebook Type","Word Count","Upgrade","Project Title"],["_builder_id"],["Project Details","Project Title","Addons","Upgrade","Word Count","Ebook Type","_builder_info","_builder_id","_master_builder","Upload your file here"]

我想做的事

我想将键与它们的值相匹配,并能够在 Zapier GUI 上选择它们。

建议代码的当前输出

Output 1stpart

Output 2ndpart

Output 3rdpart

Output 4thpart

预期输出

[{"_master_builder":"1","_builder_id":"ebook1524837342394","_builder_info":"Ebook~~//www.shappify-cdn.com/images/282516/127828455/001_Ebook Technical 325x325 (1).png~~ebook"...}]

感谢您的帮助

【问题讨论】:

    标签: zapier


    【解决方案1】:

    啊!所以这比最初看起来要复杂一些,但还不错。有两个陷阱:

    • 您的数据以字符串形式输入
    • 该字符串由多个数组对象组成,但本身不是有效的数组对象

    因此,一旦我们正确解析它,它就不会太糟糕。

    // just used for testing outside zapier
    // these are comma separated strings
    const inputData = {
      keys: '_master_builder,_builder_id,_builder_info,Ebook Type,Word Count,Upgrade,Project Title,_builder_id,Project Details,Project Title,Addons,Upgrade,Word Count,Ebook Type,_builder_info,_builder_id,_master_builder,Upload your file here',
      values: '1,ebook1524837342394,Ebook~~//www.shappify-cdn.com/images/282516/127828455/001_Ebook Technical 325x325 (1).png~~ebook,Technical Ebook,Technical 15K - $450.00,All Inclusive Package - $149.00,Cookbook Instant Pot,ebook1524837342394,Detective Story based in London......,Sherlock Holmes,No Addons,No Package,10000 Words - $270.00,Fiction Book,Ebook~~//www.shappify-cdn.com/images/282516/127828453/001_Ebook Standard 325x325.png~~ebook,ebook1524837304725,1,https://cdn.shopify.com/s/files/1/0012/8814/2906/uploads/7ddee14d6e5d6c5e4396981d1702c375.jpg'
    }
    
    // arrays must be the same length
    const zipArrays = (a, b) => {
      let res = {}
      a.forEach((val, i) => {
        res[val] = b[i]
      })
      return res
    }
    
    // have to convert strings to actual arrays
    // this will blow up if any of the data has commas in it
    const keys = inputData.keys.split(',')
    const vals = inputData.values.split(',')
    
    // now we have real arrays
    
    const result = {}
    
    // copy keys onto the result, overwriting old ones
    Object.assign(result, zipArrays(keys, vals))
    
    console.log(result)
    /*
      { _master_builder: '1',
        _builder_id: 'ebook1524837304725',
        _builder_info: 'Ebook~~//www.shappify-cdn.com/images/282516/127828453/001_Ebook Standard 325x325.png~~ebook',
        'Ebook Type': 'Fiction Book',
        'Word Count': '10000 Words - $270.00',
        Upgrade: 'No Package',
        'Project Title': 'Sherlock Holmes',
        'Project Details': 'Detective Story based in London......',
        Addons: 'No Addons',
        'Upload your file here': 'https://cdn.shopify.com/s/files/1/0012/8814/2906/uploads/7ddee14d6e5d6c5e4396981d1702c375.jpg' }
    */
    
    // return result
    

    事实上,有很多重复的键键,所以输出小于输入。如果您想以不同方式对输出进行分组,您还可以调整此代码以更好地匹配您的输入。

    希望有帮助!

    【讨论】:

    • 感谢您的参与。我收到一个错误:SyntaxError: Unexpected token _ in JSON at position 1. 还有这个额外的 cmets Object.parse (native) theFunction (eval at (/var/task/index.js:52:23), :25:19) eval (eval at (/var/task/index.js:52:23), :64:20) Domain. (/var/task/index.js :53:5) Domain.run (domain.js:221:14) module.exports.handler (/var/task/index.js:51:5)
    • 嗯。也许它不是一个字符串进来?您可以尝试获取有关输入的一些诊断信息吗?你可以return {type: typeof inputData.Keys}。我在黑暗中工作了一点
    • 是的,字符串说
    • 呃也许试试const keys = JSON.parse('[' + inputData.Keys + ']'),如果它被反引号绊倒了?我在节点 6 中测试过,但谁知道
    • 如果您可以控制其他应用程序的输出,您可以更改的另一件事是传递一个实际的 json 字符串而不是 [1],[2],[3],这是无效的
    【解决方案2】:

    这应该可以通过for 循环实现。尝试这个。

    在您的example 中,将第一个框定义为值,将第二个框定义为键。在运行代码步骤之前删除var inputData... 行。

    var inputData = {"keys": ["First", "Second", "Third"],
                    "values": ["One", "Two", "Three"]
                    };
    //Remove the lines above before pasting in the Code step. 
    //You will need to configure it in the Zap.
    
    var product = {};
    for (var i = 0; i < inputData.keys.length; i++) {
      var commonkey = inputData.keys[i];
      product[commonkey] = inputData.values[i];
    }
    console.log(JSON.stringify([product]));
       
    // already available in the zapier scope
    output = [product]

    【讨论】:

    • @fabian-c 如果此答案解决了您的问题,请务必点赞并选择正确 (info here)
    • 谢谢凯西。我按照您的步骤操作,但似乎有一个错误:我们在发送您的测试时遇到了问题。请再试一次。错误:您必须返回单个对象或对象数组。
    • 我已经调整了代码以在 Zapier 脚本中工作 - 需要始终返回一个数组!
    • 看起来键的字符正在被迭代,而不是键作为数组项。您能否使用更完整版本的输入、预期输出和您正在使用的代码来更新您的问题,以便将其作为一个整体进行查看? cmets 不是分享它的最佳场所。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 2021-05-05
    • 2018-10-07
    • 2017-02-12
    • 2021-08-09
    • 1970-01-01
    • 2021-02-28
    相关资源
    最近更新 更多