【问题标题】:JSON data concatenate two dataJSON数据连接两个数据
【发布时间】:2018-02-12 08:13:52
【问题描述】:

在 Javascript 中,我如何转换这个 JSON 数据?

我需要将名字和姓氏连接成全名

数据

[
  {
    "lastname": "Stark",
    "firstname": "Tony",
    "id": 1
  },
  {
    "lastname": "Parker",
    "firstname": "Peter",
    "id": 2
  },
  {
    "lastname": "Rogers",
    "firstname": "Steve",
    "id": 3
  },
]

这应该是结果:

结果

[
  {
    "fullname": "Tony Stark",
    "id": 1
  },
  {
    "fullname": "Peter Parker",
    "id": 1
  },
  {
    "fullname": "Steve Rogers",
    "id": 1
  },
]

【问题讨论】:

    标签: javascript json


    【解决方案1】:

    使用 JSON.parse 将您的数据解析为 JavaScript 对象,然后使用 Array#map 函数遍历项目并填充您的自定义对象。

    const dataAsJson = `[
      {
        "lastname": "Stark",
        "firstname": "Tony",
        "id": 1
      },
      {
        "lastname": "Parker",
        "firstname": "Peter",
        "id": 2
      },
      {
        "lastname": "Rogers",
        "firstname": "Steve",
        "id": 3
      }
    ]`;
    
    const data = JSON.parse(dataAsJson);
    
    const changedData = data.map(item => ({ fullname: `${item.firstname} ${item.lastname}`, id: item.id }));
    
    console.log(changedData);

    【讨论】:

    • 奇怪,它返回 data.map 不是函数
    • 哦,谢谢。所以我需要再次通过 JSON.stringify() 将 changedData 转换为 JSON 吗?
    • 你的答案有 ES5 语法吗?我需要支持 IE11,我没有使用任何转译器。
    【解决方案2】:

    如果此数据可作为 JSON 字符串提供给您的脚本,那么您可以使用 JSON.parse() 获取对象数组。

    然后对这个对象数组做任何你想做的事情。

    然后,最终,使用JSON.stringify() 将结果数据转换回字符串。

    【讨论】:

      【解决方案3】:

      您也可以使用array#reduce

      const data = `[{"lastname": "Stark","firstname": "Tony","id": 1},{"lastname": "Parker","firstname": "Peter","id": 2},{"lastname": "Rogers","firstname": "Steve","id": 3}]`;
      
      var result = JSON.parse(data).reduce((arr, obj) => {
        return arr.push({fullName : obj.firstname + " " + obj.lastname, id: obj.id }), arr;
      },[]);
      
      console.log(result);

      【讨论】:

        【解决方案4】:

        首先,通过使用解析字符串以获取JSON中的数据

        JSON.parse()

        。如果您使用的是 es6,请使用:

        const newArray = JSON.parse(yourArray).map((user) => ({
        	fullName: `${user.firstname} ${user.lastname}`,
        	id: user.id
        }));

        否则使用这个:

        const newArray = yourArray.map(function (user) {
        	return {
        		fullName: user.firstname + user.lastname,
        		id: user.id
        	};
        });

        谢谢。

        【讨论】:

          【解决方案5】:

          从逻辑上讲,您需要做的就是遍历数组并创建一个与firstnamelastname 联系的新对象。所以这是一个非花哨的 ES5 方法:

          // JSON Data parsed into JS Object
          var arr = JSON.parse('[{"lastname":"Stark","firstname":"Tony","id":1},{"lastname":"Parker","firstname":"Peter","id":2},{"lastname":"Rogers","firstname":"Steve","id":3}]');
          
          var newArr = [];
          
          for(var i=0; i<arr.length; i++)
            newArr.push({"fullname": arr[i]["firstname"] + " " + arr[i]["lastname"], "id": arr[i]["id"]});
          
          console.log(JSON.stringify(newArr)); // Convert to text for JSON.

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-11-02
            • 2016-09-16
            • 1970-01-01
            • 2013-10-04
            • 2014-01-12
            • 2020-09-02
            • 1970-01-01
            相关资源
            最近更新 更多