2013-11-14 42 views
0

我有一个对象作为REST服务器的返回数据的一部分返回。它是项目对象的一部分。如何解析包含冒号的JSON对象

(我没有在REST服务器控件,所以我不能更改接收到的数据):

{ 
    "Option:Color":"Red,Green,Blue,Orange", 
    "Option:Size":"Small,Medium,Large" 
} 

我想落得超过该部分的控制,让我可以在我的应用程序中选择产品时显示结果。它会出现在一个模式。我正在使用Marionette/Backbone/Underscore/JQuery等,但这更多的是JavaScript问题。

我已经尝试过多种获取数据的方式,但没有成功。我希望能够有嵌套数组中的选项,但我会接受其他的建议...

基本上这种结构

var Color=('Red', 'Green', 'Blue', 'Orange') 
var Size('Small', 'Medium', 'Large') 

对象结构是好的,只是需要能够将其转换为数组并取出“选项”关键字

重要的是要提到,我不知道当我收到它们时不同的选项可能是什么 - 选项之后的位:可能是任何形式变化,颜色,大小,味道等

+0

为什么不使用'var Color = OptionColor.split(“,”);'? – Elorfin

回答

1
var json = { 
      "Option:Color":"Red,Green,Blue,Orange", 
      "Option:Size":"Small,Medium,Large" 
      }; 
var color = json['Option:Color'].split(','); 
var size = json['Option:Size'].split(','); 
+0

这不会做到:“选项之后的位:可能是任何形式的变体,颜色,大小,味道等”,所以他需要动态方法 – homtg

1

试试这个做得到一个解决方案,而硬编码的所有选项名称到您的代码:

var x = { 
    "Option:Color":"Red,Green,Blue,Orange", 
    "Option:Size":"Small,Medium,Large" 
}; 

var clean = {}; 

$.each(x, function(key, val){ //iterate over the options you have in your initial object 
    var optname = key.replace('Option:', ''); //remove the option marker 
    clean[optname] = val.split(","); //add an array to your object named like your option, splitted by comma 
}); 

干净包含您要创建

编辑选项数组:好吧,你怎么弄的像“color”这样的对象属性的名称,它们现在是新对象中的键?这就像以前一样,基本上:

$.each(clean, function(key, val){ 
    //key is the name of your option here 
    //val is the array of properties for your option here 
    console.log(key, val); 
}); 

当然,我们再次坚持jQuery。 ;)

+0

您确实不需要jQuery。 –

+0

不,但他写道,他已经包含了jQuery,那么为什么不使用它......? – homtg

+1

你不应该使用jQuery来处理“纯粹”JavaScript完全能够完成的简单事情。 Imho最好不要在外部库上创建不必要的依赖关系,而不必依赖jQuery正常工作(虽然不是一个大问题)......并且它很懒惰;-) –

2

循环解析的JSON并在新对象上创建新的密钥。这样你就不必自己创建var名称;它会自动完成,尽管它是新对象的关键。

var obj = { 
    "Option:Color":"Red,Green,Blue,Orange", 
    "Option:Size":"Small,Medium,Large" 
} 

function processObj() { 
    var newObj = {}; 
    for (var k in obj) { 
     var key = k.split(':')[1].toLowerCase(); 
     var values = obj[k].split(','); 
     newObj[key] = values; 
    } 
    return newObj; 
} 

var processedObj = processObj(obj); 
for (var k in processedObj) { 
    console.log(k, processedObj[k]) 
    // color ["Red", "Green", "Blue", "Orange"], size ["Small", "Medium", "Large"] 
} 

编辑:OP我在这里,并在更新的jsfiddle代码向你展示如何循环的新的对象来获取键/值。

Fiddle

+0

这看起来很有趣。所以如果我要使用类似console.log(newObj [“Color”]);我可以看到颜色信息。但是,这是否让我以某种方式使用“颜色”,*无需知道标签将提前使用什么? – user2703990

+0

是的。甚至是'newObj.Color'。这就是说我总是喜欢我的钥匙全部小写,所以我已经稍微改变了代码以反映这一点。现在你通过'newObj.color'得到它。在_jsfiddle_中玩一下,感受一下。 – Andy