【问题标题】:Parse JSON Array Object into a JSON Object in Javascript在 Javascript 中将 JSON 数组对象解析为 JSON 对象
【发布时间】:2014-12-02 20:48:30
【问题描述】:

我有一个如下形式的 JSON 数组对象

{"Object1":[
    {"field1":"label1", "field2":"Name1"}, 
    {"field1":"label2", "field2":"Name2"},
    {"field1":"label3", "field2":"Name3"}
]}

我想把它转换成

{"label1":"Name1", "label2":"Name2", "label3":"Name3"}

我如何实现这一目标?

【问题讨论】:

  • 这样做有什么具体问题吗?
  • 这是你预定义的java格式。
  • 我正在尝试使用 ldapjs 从 LDAP 服务器搜索信息。 JSONArrayObject 是 JSON.stringify() 的结果。我试图弄清楚如何使用 JSON.parse()/stringify() 或其他我不知道的东西转换为我想要的格式。

标签: javascript json node.js


【解决方案1】:

创建一个空对象,然后遍历Object1 对象,并为其中的每个对象添加field1 中的键和field2 中的值。

类似:

var _obj = {};
jQuery.each(obj.Object1, function(k, v) {
    _obj[v.field1] = v.field2;
});

【讨论】:

  • "创建一个空的对象..."?
  • 由于Object1是一个列表,你可以直接使用obj.Object1.forEach(function(v){...})
  • 应该可以完成这项工作,但我认为只导入 jQuery 就没有必要这样做?
【解决方案2】:

试试,纯基于 javascript 的解决方案。

 var gList= {"Object1":[
    {"field1":"label1", "field2":"Name1"}, 
    {"field1":"label2", "field2":"Name2"},
    {"field1":"label3", "field2":"Name3"}
]};

function transform(){
    var arr = [];

    for(var i=0;i<gList.Object1.length;i++){
        arr.push("'" + gList.Object1[i].field1 + "':'" + gList.Object1[i].field2 + "'");
    }
    alert(arr);
}

输出

'label1':'Name1','label2':'Name2','label3':'Name3

DEMO

【讨论】:

  • 是的@undefined,在这个演示中,我在字符串中创建了 json。请检查。认真的。
  • OP 已解析/清理 JavaScript 结构,您已将有效结构转换为 invalid JSON 并强制使用 eval 将其转换为 JavaScript。这不仅不能回答问题,而且还是一种反模式。
  • 是的,是否有理由将对象放在字符串中,然后将其重新转换为对象? (这是一个真正的问题:))
  • 更新了答案。删除了 eval() 函数。
【解决方案3】:

为了实现这一点 这对你有用

//把这个赋值给任意变量

  var obj={"Object1":[
     {"field1":"label1", "field2":"Name1"}, 
    {"field1":"label2", "field2":"Name2"},
    {"field1":"label3", "field2":"Name3"}
]};
//Now take an array
try{
var arr=obj.Object1;
 var newObj={};

  for(var i=0;i<arr.length;i++)
  {
   newObj[arr[i].field1]=arr[i].field2;
  }

  alert(JSON.stringify(newObj));

}
 catch(err){alert(err.message);
}

【讨论】:

    【解决方案4】:

    带有基本 for loop 的纯 JS 内容:http://jsfiddle.net/1c911ebr/

    var object = {"Object1":[
        {"field1":"label1", "field2":"Name1"}, 
        {"field1":"label2", "field2":"Name2"},
        {"field1":"label3", "field2":"Name3"}
    ]},
        content = object["Object1"],
        newObj = {};
    
    
    for(var i=0; i<content.length; i++){    
        newObj[content[i].field1] = content[i].field2;    
    }
    

    将返回:

    {label1: "Name1", label2: "Name2", label3: "Name3"}
    

    【讨论】:

      【解决方案5】:

      使用此代码。

      var json = "{'Object1':["+
          "{'field1':'label1', 'field2':'Name1'},"+
          "{'field1':'label2', 'field2':'Name2'},"+
          "{'field1':'label3', 'field2':'Name3'}"+
      "]}";
      
      
      function getJSONObj(){
           var gList = eval("(" + json + ")");   
          var jsonObj = {};
      
          for(var i=0;i<gList.Object1.length;i++){
              jsonObj[gList.Object1[i].field1 ] = gList.Object1[i].field2;
          }
          alert(JSON.stringify(jsonObj));
      }
      
      
      getJSONObj();
      

      链接 - http://jsfiddle.net/de5xoe3r/5/

      【讨论】:

        【解决方案6】:
        var json = {"Object1":[
            {"field1":"label1", "field2":"Name1"}, 
            {"field1":"label2", "field2":"Name2"},
            {"field1":"label3", "field2":"Name3"}
        ]};
        
        function getJSONObj()
        {
            var gList = eval("(" + json + ")");   
            var jsonObj = {};
            $.each(gList.Object1, function (keyData, valueData)
            {
                jsonObj[valueData.field1] = valueData.field2;
            });
        }
        getJSONObj();
        

        输出:

        {"label1":"Name1", "label2":"Name2", "label3":"Name3"}
        

        【讨论】:

          猜你喜欢
          • 2020-05-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-04
          • 2023-03-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多