【问题标题】:Replace key-value pair in an object with Google Apps Script用 Google Apps 脚本替换对象中的键值对
【发布时间】:2016-08-21 20:52:45
【问题描述】:

我正在使用 Apps Script 调用商业产品的 API。不幸的是,生成的对象有几个 key-value 对,其中包含来自链接表的 id

我可以轻松获得标准值并编写代码来查找相关的name 值并将其添加到对象中。我希望将name 添加到与原始id 相同的位置。但是,当我添加一个新的key 时,它会添加到对象的末尾。

我希望nameid 位于同一位置,因此当我将其插入工作表时,各列仍将按顺序排列。

这是我的对象:

var json = {id: 4730183,name: "A A", customer_source_id:123, company: "NE Company"};

这是我在将id 替换为name 后想要的对象:

var json = {id: 4730183,name: "A A", source:"CRM", company: "NE Company"};

基本上,我想在对象中找到customer_source_id,并将其替换为source

我不能使用indexOfsplice,因为对象不是数组。

最好的方法是什么?我必须先将其转换为数组然后再转换回来吗?

【问题讨论】:

    标签: object google-apps-script


    【解决方案1】:

    一个快速的答案是:

       var obj = {id: 4730183,name: "A A", customer_source_id:123, company: "NE Company"};
       var json = JSON.stringify(obj);
       json = json.replace("customer_source_id","source")
    

    更好的答案是:
    @Waqar Ahmed 是正确的。 JavaScript 对象是无序的。在您的示例中,“var json”是一个不是 JSON 的对象。您可以使用JSON.stringify(json) 将其设为 JSON。但是一旦 JSON 被解析成一个对象,它就会再次变得无序。您不应该使用它来存储有序数据。

    【讨论】:

      【解决方案2】:

      我不确定它是否有效,但您可以遍历键并构建一个新的 json 对象,如下所示:

      var newjson = {};
      for(var key in json){
          if(key === 'customer_source_id'){
             newjson.source = [NEW VALUE TO DISPLAY];
          }else{
             newjson[key] = json[key];
          }
      }
      json = newjson;
      

      但是,就像@Waqar 和@Spencer 所说,该对象不用于有序数据。

      【讨论】:

        【解决方案3】:

        你只能在java脚本数组中做他。不在 JSON 中。 JSON 旨在通过键而不是索引来寻址。将您的 json 更改为

        var json ={id: 4730183,name: "A A", customer_source_id:null, items : [] company: "ESI"};
        

        现在您可以使用数组的push 方法插入项目。

        json.items.push('My Item');
        

        【讨论】:

        • 感谢您的宝贵时间。我重新表述了这个问题,因为我认为我的情况没有得到适当的解释。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多