2013-03-26 196 views
-1

我是新来的JSON,并有一个Java servlet,让下面的JSON输出:如何构建嵌套的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,最好的方法是什么?

感谢, 周杰伦

+1

当你把一个以上的'JSON'对象,它不再是一个JSON对象,它应该是一个JSON阵列。 – NewUser 2013-03-26 02:35:37

+0

我试过使用Javascript构建一个存储字母{“A”,“C”,“F”,“G”,“T”}和{“zipcode”:“city”的二维数组, “state”},然后我使用JSON.stringify(array)函数来获取JSON字符串,但没有成功。 – 2013-03-26 02:41:09

回答

0

这应做到:

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)); 
+0

与我正在尝试做的相似,谢谢:) – 2013-03-26 03:38:40

0

这是假设的状态进行排序。 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);