【问题标题】:How to build nested JSON object?如何构建嵌套的 JSON 对象?
【发布时间】:2013-03-15 17:26:46
【问题描述】:

我是 JSON 新手,我有一个 Java servlet,它提供以下 JSON 输出:

{
     "35808": "Huntsville, Alabama",
     "94203": "Sacramento, California",
     "33054": "Miami, Florida",
     "32801": "Orlando, Florida",
     "30301": "Atlanta, Georgia",
     "78717": "Austin, Texas"
}

通过 Javascript 检索 JSON 后,我想创建一个按状态分组的嵌套 JSON,结果应该是:

 {
     "A": {
         "35808": "Huntsville, Alabama"
     },
     "C": {
         "94203": "Sacramento, California"
     },
     "F": {
         "33054": "Miami, Florida",
         "32801": "Orlando, Florida"
     },
     "G": {
         "30301": "Atlanta, Georgia"
     },
     "T": {
         "78717": "Austin, Texas"
     }
}

最好使用 Javascript 来完成此任务的最佳方法是什么?或者如果使用 Java,最好的方法是什么?

谢谢, 周杰伦

【问题讨论】:

  • 当你放置多个JSON对象时,它不再是一个JSON对象它应该是一个JSON数组。
  • 我尝试使用 Javascript 构建一个二维数组,用于存储字母 {"A"、"C"、"F"、"G"、"T"} 和 {" zipcode": "city", "state"},然后我使用 JSON.stringify(array) 函数获取 JSON 字符串,但没有成功。

标签: java javascript json web-applications servlets


【解决方案1】:

这假设状态是排序的。 http://jsfiddle.net/N23SL/

var originalJson = {
     "35808": "Huntsville, Alabama",
     "94203": "Sacramento, California",
     "33054": "Miami, Florida",
     "32801": "Orlando, Florida",
     "30301": "Atlanta, Georgia",
     "78717": "Austin, Texas"
}


var groupMe = function(originalJson)
{
    var grouped = {};
    // loop over each property
    for(var key in originalJson)
    {
        var value = originalJson[key];
        var state=value.split(", ")[1];
        var stateLetter = state[0];

        var letterGroup = grouped[stateLetter];
        if(typeof letterGroup === 'undefined')
        {
            letterGroup = {};
            grouped[stateLetter] = letterGroup;
        }

        letterGroup[key] = value;
    }

    return grouped;

};

var groupedJson = groupMe(originalJson);

console.log(groupedJson);

【讨论】:

    【解决方案2】:

    应该这样做:

    var parsedJSON = …;
    var byState = {};
    for (var prop in parsedJSON) {
        var address = parsedJSON[prop];
        var state = address.split(",")[1] || "";
        var stateKey = state.charAt(0);
        if (! (stateKey in byState))
            byState[stateKey] = {};
        byState[stateKey][prop] = address;
    }
    console.log(JSON.stringify(byState, null, 4));
    

    【讨论】:

    • 与我尝试做的类似,谢谢:)
    猜你喜欢
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 2017-02-14
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多