在不知道其结构的情况下添加到JSON

时间:2010-08-26 23:12:52

标签: json

例如,假设我有一个包含州和城市的JSON对象。像这样

var obj = { states : [ {'state1' : {cities : ['city', 'another']} } ] }

现在假设我们的脚本通过执行obj.states.push(stateVar)

添加状态

我们如何将城市添加到这个新创建的州?我尝试了obj.states[1].push(cityVar)obj.states[1].cities.push();之类的内容,但这样做不是函数错误。

2 个答案:

答案 0 :(得分:2)

它闻起来好像你的结构有点偏。你可能想要这样的东西:

var obj = { states : {'state1' : {cities : ['city', 'another']} } }
obj.states[newState] = {cities : ['even', 'more', 'cities']}
obj.states[newState].cities.push('again')

答案 1 :(得分:1)

您可以将states更改为this answer建议的对象,也可以将其更改为此表单 -

 var obj = {states : [
     { name: 'state1', cities : [ 'city1', 'city2'] },
     { name: 'state2', cities : [ 'city1', 'city2'] }
 ]}

考虑一下,根据你的结构,如果你只有一个状态对象,除非你知道州名,否则你无法访问它的城市! (这是可能的,但它变得丑陋)

取决于您的用例,您需要Object还是Array。对象适用于按键快速查找,而数组适用于枚举,并且它们维护顺序。 (对象在大多数实现中也保持顺序,但它不符合规范,因此无法保证。)