解析JS中的多级JSON

时间:2018-09-23 12:01:49

标签: javascript json

我有这样的JSON:

<b>Just add maxHeight={200} inside SelectField</b>

< SelectField
multiple

fullWidth = {true}

value={this.state.candidate_profile_arr}

onChange = {this.handleChange}

maxHeight = {200}

>

{this.state.profile.map((profile, i) =>

<MenuItem  value={profile.id} key={i} primaryText={profile.name} />)
}

</SelectField>

,我需要从中获取“ id”值。第一个数字(“ 245”)始终是不同的。

3 个答案:

答案 0 :(得分:2)

JSON.parse reviver parameter可用于检查所有属性:

var id, json = '{"245":{"data":{"userData":{"id":"61","image":"http://example.com","name":"John Smith","friends":[{"invited":"67"},{"invited":"62"},{"invited":"65"},{"invited":"66"}],"operator":true}}}}'

var obj = JSON.parse(json, (key, val) => key == 'id' ? id = val : val)

console.log( id )

答案 1 :(得分:1)

如果始终具有此结构,则可以通过以下方法获取ID:

var obj = {
  "245": {
    "data": {
      "userData": {
        "id": "61",
        "image": "http://example.com",
        "name": "John Smith",
        "friends": [
          {
            "invited": "67"
          },
          {
            "invited": "62"
          },
          {
            "invited": "65"
          },
          {
            "invited": "66"
          }
        ],
        "operator": true
      }
    }
  }
};
var result = Object.entries(obj);
console.log(result[0][1]["data"]["userData"]["id"])

答案 2 :(得分:0)

不确定您要寻找的最终输出是什么。您可以采取以下方法。如果您需要所有密钥,则ID对可以尝试此操作,其中数据是您的对象。

const arr = [];
Object.keys(data).forEach((key, index) => {
  arr.push({ key, id: data[key].data.userData.id });
});
console.log(arr);

如果只需要单个值,并且可以确定对象结构始终使用必需的键,则键为“ 245”。

const id = data[key].data.userData.id

如果需要,您还可以查看lodash.get

const id = _.get(data[key], "data.userData.id", "NA");

https://lodash.com/docs/4.17.10#get