Как я могу разобрать объект JSON, содержащий двоеточие

0

У меня есть объект, который возвращается как часть возвращаемых данных с сервера 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"

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

  • 0
    Почему бы не использовать var Color = OptionColor.split(","); ?
Теги:
backbone.js

3 ответа

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, чтобы показать вам, как перебирать новый объект, чтобы получить ключи/значения.

Скрипт.

  • 0
    Это выглядит очень интересно. Так что, если бы я использовал что-то вроде console.log (newObj ["Color"]); Я мог бы получить информацию о цвете. Но дает ли это мне «Цвет» в некотором роде, я могу использовать его, не зная, какой будет этикетка заранее?
  • 0
    Да. Или даже newObj.Color . Тем не менее, я всегда предпочитаю, чтобы мои ключи были строчными, поэтому я немного изменил код, чтобы отразить это. Теперь вы получите его с помощью newObj.color . Поиграйте в jsfiddle, чтобы почувствовать это.
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 будет содержать массивы параметров, которые вы хотите создать.

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, так почему бы не использовать его ...?
Показать ещё 7 комментариев
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
    это не будет делать это: «бит после опций: может быть любая форма вариации, цвета, размера, аромата и т. д.», поэтому ему нужен динамический подход

Ещё вопросы

Сообщество Overcoder
Наверх
Меню