解析包含Json字符串的JSON对象

时间:2017-08-09 23:45:18

标签: javascript json

我想解析包含某个值的JSON对象作为json字符串,请注意我之前不知道那些字段,所以我不能做类似的事情 obj[key]=JSON.parse(obj[key])。我正在寻找一种简单的方法来做到这一点,

obj={
  Name:"{\"FirstName\":\"Douglas\",\"LastName\":\"Crockford\"}"
}

我想要

{
  Name:{
      FirstName:"Douglas",
      LastName:"Crockford"
      }
}

4 个答案:

答案 0 :(得分:0)

您可以使用Object.keys(obj)获取属性名称以允许您使用JSON.parse()

答案 1 :(得分:0)

您可以随时尝试/传递每个密钥:



a = {
  a: 1,
  b: JSON.stringify({a: 1, b: 2}),
  c: 'asdf'
}
console.log(a);
new_a = {}
Object.keys(a).map((key) => {
  try {
    new_a[key] = JSON.parse(a[key]);
  } catch(err) {
    new_a[key] = a[key];
  }
})

console.log(new_a);




答案 2 :(得分:0)

我们将编写一个方便的小实用程序,它将函数映射到对象属性:

function mapObject(obj, fn) {
  const result = {};
  for (const prop in obj) result[prop] = fn(obj[prop], prop);
  return result;
}

现在,您只需说出

即可创建一个包含所有输入JSON值的对象
mapObject(obj, JSON.parse)

如果要防范无效JSON的属性值,那么

function parseJSON(x) {
  try { return JSON.parse(x); }
  catch (e) { return x; }
}

然后

mapObject(obj, parseJSON)

答案 3 :(得分:0)

如果您想对此产生矛盾,可以使用"reviver parameter"处理此方案的任意嵌套版本。从stringifying您的对象开始!

function parseJSON(k,v) {
  try { return JSON.parse(v, parseJSON); }
  catch(e) { return v; }
}
JSON.parse(JSON.stringify(obj), parseJSON);

那真漂亮,还是仅仅是我?