2016-09-06 37 views
2

UPDATE解析JSON结果和创建自定义对象时,它

在这篇文章的所有解决方案回答我的问题,但我只能标记一个为例外的答案...

我有这样的JSON结果:

[ 
    { 
     "unsorted1":[7,7,10,3,3] 
    }, 
    { 
     "unsorted2":[8,9,3,10,6] 
    } 
] 

我想作在JavaScript的阵列,其具有每个“unsorted1”和“unsorted2”作为键,第e [7,7,10,3,3]和[8,9,3,10,6]必须保持JSON格式。像这样的对象unsorted1:[7,7,10,3,3]和unsorted2:[8,9,3,10,6]

这是我在浏览器中使用console.log(JSON.parse(returnVar));参数保存的returnVar参数我从上面得到的JSON结果。

enter image description here

我读了很多,尝试了很多,但没有接近我想要的东西。不知怎的,我无法完成它。

我试图修改没有成功验证码

var resultObj = {}; 
for (var key in returnVar) { 
    if (returnVar.hasOwnProperty(key)) { 
     var val = returnVar[key]; 
     console.log("val: " + val); 
     var keyName = Object.keys(val); 
     console.log("key Name: " + keyName); 
     for (var keykey in val) { 
      if (val.hasOwnProperty(keykey)) { 
       var valval = val[keykey] 
       resultObj[keyName] = JSON.stringify(valval); 
      } 
     } 
    } 
} 

回答

1

//if the Json result is an object - this is how you parse it 
 

 
var objJson = [{ 
 
    "unsorted1": [7, 7, 10, 3, 3] 
 
}, { 
 
    "unsorted2": [8, 9, 3, 10, 6] 
 
}]; 
 

 
function parse() { 
 
    if (Array.isArray(objJson) === true) { 
 
    objJson.map(function(i) { 
 
     //alert(JSON.stringify(i)); 
 
     console.log(JSON.stringify(i)); 
 
    }); 
 
    }; 
 
} 
 
parse(); 
 

 
//if your json result is a string - this is how you do it 
 
var strJson = "[{\"unsorted1\": [7, 7, 10, 3, 3]}, {\"unsorted2\": [8, 9, 3, 10, 6]}]"; //dont worry about the escaped quotes here - this is a string that is represented here.. but it will work if your JSON result is a string. 
 

 
function parseString() { 
 
    var objJson = JSON.parse(strJson); 
 
    if (Array.isArray(objJson) === true) { 
 
    objJson.map(function(i) { 
 
     //alert(JSON.stringify(i)); 
 
     console.log(JSON.stringify(i)); 
 
    }); 
 
    }; 
 
} 
 
parseString();

+0

我的结果在unsorted1和unsorted2之前和之后没有反斜杠。我从C++代码中获得了该帖子开头所述的JSON结果。 – TalG

+0

@TalG更新我的脚本上面.. – Jaya

+0

有没有办法不使用JSON的'JSON.parse()'函数结果是一个字符串? – TalG

1

你可以试试这个代码:

var response = [ 
    { 
    "unsorted1":[7,7,10,3,3] 
    }, 
    { 
    "unsorted2":[8,9,3,10,6] 
    } 
]; 

var customObject = response.reduce(function(result, item) { 
    var keys = Object.keys(item); 

    if(keys.length) { 
    result[keys[0]] = item[keys]; 
    } 

    return result; 
}, {}); 
+0

当我改变'result [keys [0]] = item [keys];'result'[keys [0]] = JSON.stringify(item [keys] );' – TalG

1

var a = [ 
 
    { 
 
     "unsorted1": [7, 7, 10, 3, 3] 
 
    }, 
 
    { 
 
     "unsorted2": [8, 9, 3, 10, 6] 
 
    } 
 
] 
 

 
var b = {} 
 

 
a.forEach(function(x) { 
 
    Object.keys(x).forEach(function(y) { 
 
     b[y] = JSON.stringify(x[y]) 
 
    }) 
 
}) 
 

 
console.log(b);

+0

这也是完美的。有没有办法做到这一点,而不先使用'JSON.parse(a);'。问题是JSON数组作为字符串从我的C++代码发送。我是否必须更改我的C++代码才能将其作为数组发送,而不是字符串? – TalG

+0

@TalG:我已根据您的评论更新了我的答案。第一个版本是如果给定的对象是'JsonObject',则下一个版本是如果你的结果是'string'的话。你也需要用相关的细节来更新你的问题,以了解你如何获得结果 - 你说'C++'你究竟是什么意思?这是服务器端代码吗?你所谓的'C++'如何传递这个结果对象,或者你如何从客户端调用它? – Jaya