2013-11-14 6 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') 

Структура объекта хорошо, просто должен иметь возможность перевести его в массив и вынуть ключевое слово «Option»

Важно отметить, что я понятия не имею, какие могут быть разные параметры при их получении - бит после параметров: может быть любая форма изменения, цвета, размера, вкуса и т.д.

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

чистые будет содержать опции массивы, которые вы хотите создать

EDIT: Хорошо, как вы получите имена ваших свойств объекта, такие как «цвет», которые теперь являются ключами в вашем новом объекте? То же самое, что и раньше, в основном:

$.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"] 
} 

Edit: OP Я обновил код здесь и в jsfiddle, чтобы показать вам, как цикл по новому объекту, чтобы получить ключи/значения.

Fiddle.

+0

Это выглядит очень интересно. Поэтому, если бы я использовал что-то вроде console.log (newObj ["Color"]); Я мог получить информацию о цвете. Но делает ли это «цвет» каким-то образом я могу использовать его, * не зная, какой ярлык будет заблаговременно? – user2703990

+0

Да. Или даже 'newObj.Color'. Тем не менее, я всегда предпочитаю, чтобы мои ключи были строчными, поэтому я немного изменил код, чтобы отразить это. Теперь вы получите его с помощью 'newObj.color'. Поиграйте в _jsfiddle_, чтобы почувствовать это. – Andy

Смежные вопросы