【问题标题】:Restructuring JSON Data重构 JSON 数据
【发布时间】:2017-06-20 01:52:33
【问题描述】:

目前我有一个 json 文件,其中存储了多个数据,如下所示:

{"name": ["Adelphi University"], "supp": ["Yes: E, WS"], "ed": ["\u00a0"], "online": ["$40"], "ea": ["12/1"], "mid": ["No"], "rd": ["Rolling"], "recs": ["Yes: CR"], "mail": ["$40"], "schoolr": ["Yes"]}

这一行应该代表一所大学(因此得名),“name”后面的变量,即“supp”、“online”等,是该学校的属性。我将如何重构这些数据以使“名称”变量定义数据,而其他变量是“名称”父项的子项。我的数据应该是这样的:

{
  "schools": {
    "Adelphi University": {
      "supp": "Yes: E, WS",
      "ed": "\u00a0",
      "online": "$40",
      "ea": "12/1", 
      "mid": "No", 
      "rd": "Rolling", 
      "recs": "Yes: CR", 
      "mail": "$40", 
      "schoolr": "Yes",    
    },
    "Dartmouth College": { ... },
    "Harvard University": { ... }
  }
}

我该怎么做呢?

【问题讨论】:

  • 显示你的代码;到目前为止你尝试过什么?
  • 顺便说一句,我不同意“过于广泛”的投票。

标签: javascript json parsing firebase firebase-realtime-database


【解决方案1】:

假设您作为起点显示的对象是一组看起来相同的记录中的一个记录,您可以执行以下操作:

var schoolArray = [/** your current json structure **/];
var schools = {};

schoolArray.forEach(function(item) { 
  //probably want to test for existence here, just in case
  var name = item.name[0];
  schools[name] = {};
  delete item.name;
  Object.keys(item).forEach(function(key) { 
    // again, testing for existence on the right hand side woudl be a good idea. 
    schools[name][key] = item[key][0];
  });
});

console.log({ schools : schools });  // should be the structure you asked for. 

【讨论】:

  • 该代码有效,但它从变量名称和变量中删除了“”引号。有什么办法可以保留吗?
  • 这会给你一个 javascript 对象。如果你想要再次使用 JSON,只需 JSON.stringify 对象。
【解决方案2】:

您可以迭代键并测试name,然后使用名称构建一个对象并分配一个临时对象。否则赋值。

var array = [{ "name": ["Adelphi University"], "supp": ["Yes: E, WS"], "ed": ["\u00a0"], "online": ["$40"], "ea": ["12/1"], "mid": ["No"], "rd": ["Rolling"], "recs": ["Yes: CR"], "mail": ["$40"], "schoolr": ["Yes"] }, { "name": ["Dartmouth College"], "supp": ["Yes: E, WS"], "ed": ["\u00a0"], "online": ["$40"], "ea": ["12/1"], "mid": ["No"], "rd": ["Rolling"], "recs": ["Yes: CR"], "mail": ["$40"], "schoolr": ["Yes"] }],
    schools = {},
    result = { schools: schools };

array.forEach(function (a) {
    var temp = {};
    Object.keys(a).forEach(function (k) {
        if (k === 'name') {
            schools[a[k][0]] = temp;
            return;
        }
        temp[k] = a[k][0];
    });
});

console.log(JSON.stringify(result));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 如何在变量名和变量周围保留“”引号?有没有办法做到这一点?
  • 保留引号是什么意思?
  • 对于我所需要的,JSON 数据需要引号——否则它不会运行。我有 600 多条数据,手动添加它们很繁琐。
  • 你能添加一个小例子吗?还是您在谈论JSON 字符串
  • 现在类似上面的东西?
猜你喜欢
  • 2018-03-05
  • 1970-01-01
  • 2019-11-18
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多