首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正在处理JSON

问正在处理JSON
EN

Stack Overflow用户
提问于 2020-03-31 07:07:28
回答 2查看 55关注 0票数 1

对于这个简单的问题我很抱歉。我刚开始使用JSON和JS。

我有‘fucts.json’:

代码语言:javascript
复制
      {
        "Apples": {
            "Apples_pos1": 501.82,
            "Apples_pos2": 502.61,
            "Apples_pos3": 502.61,
            "Apples_pos4": 502.16,
        },
        "Bananas": {
            "Bananas_pos1": 495.73,
            "Bananas_pos2": 493.27,
            "Bananas_pos3": 493.38,
            "Bananas_pos4": 494.34,
        },
        "Oranges": {
            "Oranges_pos1": 497.35,
            "Oranges_pos2": 497.31,
            "Oranges_pos3": 498.03,
            "Oranges_pos4": 496.67,
        },
        "Pears": {
            "Pears_pos1": 497.62,
            "Pears_pos2": 498.46,
            "Pears_pos3": 497.54,
            "Pears_pos4": 497.95,
        },

我想调用'fruits.json‘并重新格式化它,如下所示:

代码语言:javascript
复制
[["Apples", 501.82, "Apples_pos1"],
["Apples", 502.61, "Apples_pos2"],
["Apples", 502.61, "Apples_pos3"],
["Apples", 502.16, "Apples_pos4"],
["Bananas", 495.73, "Bananas_pos1"],
["Bananas", 493.27, "Bananas_pos2"],
["Bananas", 493.38, "Bananas_pos3"],
["Bananas", 494.34, "Bananas_pos4"],
["Oranges", 497.35, "Oranges_pos1"],
["Oranges", 497.31, "Oranges_pos2"],
["Oranges", 498.03, "Oranges_pos3"],
["Oranges", 496.67, "Oranges_pos4"],
["Pears", 497.62, "Pears_pos1"],
["Pears", 498.46, "Pears_pos2"],
["Pears", 497.54, "Pears_pos3"],
["Pears", 497.95, "Pears_pos4"]]

目前,我使用此函数来调用JSON:

代码语言:javascript
复制
function retrieveJSON(jsonpath, callback) {
  $.ajax({
    type: "GET",
    url: jsonpath,
    dataType: "json",
    success: function (data) {
      console.log("success");
      callback(data);
    },
    error: function (response) {
      console.log("error");
      console.log(response);
      callback({"error": "!!!!"});
    }
  });
}

document.addEventListener('DOMContentLoaded', function () {
    let url = window.location;
    let baseURL = url.protocol + "//" + url.host;
     retrieveJSON(baseURL + "/static/json/fruits.json", (json_data) => {
      console.log(json_data);
});
});

对于如何在调用JSON之后将其重新格式化为我想要的格式,有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-31 07:13:39

您可以尝试在运行Object.keys / Object.entries的同时运行array.reduce()

​

代码语言:javascript
复制
let input =  {
        "Apples": {
            "Apples_pos1": 501.82,
            "Apples_pos2": 502.61,
            "Apples_pos3": 502.61,
            "Apples_pos4": 502.16,
        },
        "Bananas": {
            "Bananas_pos1": 495.73,
            "Bananas_pos2": 493.27,
            "Bananas_pos3": 493.38,
            "Bananas_pos4": 494.34,
        },
        "Oranges": {
            "Oranges_pos1": 497.35,
            "Oranges_pos2": 497.31,
            "Oranges_pos3": 498.03,
            "Oranges_pos4": 496.67,
        },
        "Pears": {
            "Pears_pos1": 497.62,
            "Pears_pos2": 498.46,
            "Pears_pos3": 497.54,
            "Pears_pos4": 497.95,
        }
        };
        
 let output = Object.keys(input).reduce((acc, outerKey) => {
      for(let [key, value] of Object.entries(input[outerKey])){
          acc.push([outerKey, value, key.split('_')[1]]);      
      }
      return acc;
 }, []);
 
 console.log(output);

​

票数 3
EN

Stack Overflow用户

发布于 2020-03-31 07:27:48

您可以使用for...in循环或任何类型的循环来实现这一点。然后通过执行data[nameOfKey]从数据中查找值。

​

代码语言:javascript
复制
const fruitList = {
  "Apples": {
    "Apples_pos1": 501.82,
    "Apples_pos2": 502.61,
    "Apples_pos3": 502.61,
    "Apples_pos4": 502.16,
  },
  "Bananas": {
    "Bananas_pos1": 495.73,
    "Bananas_pos2": 493.27,
    "Bananas_pos3": 493.38,
    "Bananas_pos4": 494.34,
  },
  "Oranges": {
    "Oranges_pos1": 497.35,
    "Oranges_pos2": 497.31,
    "Oranges_pos3": 498.03,
    "Oranges_pos4": 496.67,
  },
  "Pears": {
    "Pears_pos1": 497.62,
    "Pears_pos2": 498.46,
    "Pears_pos3": 497.54,
    "Pears_pos4": 497.95,
  },
}

function reformat(fruitList) {
  let formattedFruits = "";
  for (fruit in fruitList) {
    for (fruitPosName in fruitList[fruit]) {
      const fruitValue = fruitList[fruit][fruitPosName];
      formattedFruits += `\n {"${fruit}", ${fruitValue}, "${fruitPosName}"}`
    }
  }

  return formattedFruits
}

console.log(reformat(fruitList))

​

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60940972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档