如何解析包含冒号的JSON对象

时间:2013-11-14 10:59:48

标签: javascript jquery json backbone.js

我有一个对象作为REST服务器返回数据的一部分返回。它是项目对象的一部分。

(我无法控制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')

对象结构很好,只需要能够将其转换为数组并取出'Option'关键字

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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(',');

答案 2 :(得分: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
});

clean将包含您要创建的选项数组

编辑:好的,你如何获得对象属性的名称,如“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。 ;)