在本机中获取JSON键的数组

问题描述 投票:1回答:1

我有格式的JSON数据

[{
    "Heading1": [{
        "questionID": "q1",
        "questionTitle": "Question 1",
        "question": "This is question1",
        "status": 0,
        "files": [],
        "uploadType": "none"
    }, {
        "questionID": "q2",
        "questionTitle": "Question 2",
        "question": "This is question2",
        "status": 0,
        "files": [],
        "uploadType": "none"
    }]
}, {
    "Heading2": [{
        "questionID": "q3",
        "questionTitle": "Question 11",
        "question": "This is a question11",
        "status": 0,
        "files": [],
        "uploadType": "none"
    }]
}, {
    "Heading3": [{
        "questionID": "q4",
        "questionTitle": "Question 1",
        "question": "This is a question",
        "status": 0,
        "files": [],
        "uploadType": "none"
    }]
}]

我试图以[{"Title":"Heading1"},{"Title":"Heading2"},{"Title":"Heading3"}]这样的格式获得所有标题

我该怎么办呢?

json reactjs react-native
1个回答
0
投票

首先,如果你真的有JSON(例如,你的起始点是一个字符串,例如来自ajax响应),你可以通过JSON.parse解析它以获得一个对象数组。然后循环数组并通过Object.keys(x)[0]从每个顶级对象中获取唯一的键,并将其映射到您想要的表单中的对象数组:

const json = '[{"Heading1":[{"questionID":"q1","questionTitle":"Question 1","question":"This is question1","status":0,"files":[],"uploadType":"none"},{"questionID":"q2","questionTitle":"Question 2","question":"This is question2","status":0,"files":[],"uploadType":"none"}]},{"Heading2":[{"questionID":"q3","questionTitle":"Question 11","question":"This is a question11","status":0,"files":[],"uploadType":"none"}]},{"Heading3":[{"questionID":"q4","questionTitle":"Question 1","question":"This is a question","status":0,"files":[],"uploadType":"none"}]}]';
const parsed = JSON.parse(json);
const result = parsed.map(entry => {
  return {Title: Object.keys(entry)[0]};
});
console.log(result);

map回调可以是一个简洁的箭头函数,但我认为使用上面的详细形式会更清楚。简洁的形式是:

const result = parsed.map(entry => ({Title: Object.keys(entry)[0]}));

请注意,以这种方式使用Object.keys只有在对象确实只有一个属性时才可靠,就像您的问题一样。如果它们有多个属性,那么属性在Object.keys数组中列出的顺序没有定义(即使在ES2015 +中,属性确实有一个顺序 - Object.keys不需要遵循该顺序[尽管它在每个现代引擎上都有)我已经测试了])。

© www.soinside.com 2019 - 2024. All rights reserved.