将json转换为数组/映射

时间:2017-01-17 16:58:27

标签: javascript json ecmascript-6

我的rest API返回以下json内容:

this.props.json.map(row => {
    return <RowRender key={id.row} row={row} />
}

我正在使用以下代码遍历列表:

Array.prototype.slice.call(this.props.json).map(row => {
    return <RowRender key={id.row} row={row} />
}

它的工作原理是因为显示了内容但是在网络浏览器的控制台上我看到了一个错误:

  

地图不是功能

我用Google搜索并将代码更改为:

{{1}}

它没有任何错误,但似乎很复杂。这是完成这项工作的正确方法吗?

更新

我尝试了什么:

  • JSON.parse(...)。map:JSON输入的意外结束
  • JSON.parse(JSON.stringify(...))。map(...):显示数据但是我收到一个错误:JSON.parse(...)。map不是函数
  • 数组(...)。map:数组或迭代器中的每个子项都应该有一个唯一的键。

4 个答案:

答案 0 :(得分:0)

org.springframework.beans.factory.support.NullBean cannot be cast to User

答案 1 :(得分:0)

您可以很轻松地做到这一点,如@Gary在他的回答中所述:

MapJSON(字符串键):

const personsJson = `{"1":{"firstName":"Jan","lastName":"Kowalski"},"2":{"firstName":"Justyna","lastName":"Kowalczyk"}}`;
const personsObject = JSON.parse(personsJson);
const personsMap = new Map(Object.entries(personsObject));
for (const key of personsMap.keys()) {
    console.log(typeof key)
}

但是有一个问题您必须要小心。以这种方式创建的地图的键将始终为 STRING 。将会发生,因为JSON对象的KEY始终是STRING 。因此,如果您的Map键应该是数字,那么首先您要拥有对象条目的解析键。

  • JSONMap(数字键):

const personsJson = `{"1":{"firstName":"Jan","lastName":"Kowalski"},"2":{"firstName":"Justyna","lastName":"Kowalczyk"}}`;
const personsObject = JSON.parse(personsJson);
const personObjectEntries = Object.entries(personsObject);
const personObjectEntriesNumberKeys = personObjectEntries.map(person => {
    person[0] = parseInt(person[0]);
    return person;
});
const personsMap = new Map(personObjectEntriesNumberKeys);
for (const key of personsMap.keys()) {
    console.log(typeof key)
}

存在person[0],因为在0索引下有对象的键

答案 2 :(得分:0)

您可以复制粘贴此函数:它将使用JSON并返回Map of Maps:

它与此JSON一起使用:

{
   "data":{
      "1":{
         "color":"red",
         "size":"big"
      },
      "2":{
         "color":"red",
         "size":"big"
      },
      "3":{
         "color":"red",
         "size":"big"
      },
      "4":{
         "color":"red",
         "size":"big"
      },
      "5":{
         "color":"red",
         "size":"big"
      }
   }
}
function jsonToMap(jsonString)  {
    var jsonObject = JSON.parse(jsonString);
    var dataObject = jsonObject.data;
    var dataMap = new Map(Object.entries(dataObject));
    var resultMap = new Map();
    for (const key of dataMap.keys())  {
        console.log(key);
        var keyMap = new Map(Object.entries(dataMap.get(key)));
        resultMap.set(key, keyMap);
    }

    console.log("done!");
    return resultMap;
}

答案 3 :(得分:0)

let jsonMap = JSON.stringify([...map.entries()])
let myMap = new Map(JSON.parse(jsonMap));