Конвертировать JSON в массив Javascript

9

В настоящее время я получаю объект JSON со стороны сервера моего приложения, результатом этого является

{"tags":"[{value: 2,label: 'Dubstep'},{value: 3,label: 'BoysIIMen'},{value: 4,label:'Sylenth1'}]"}

Но тогда мне действительно не нужны "теги" и двойные кавычки в результате.

Так что я хочу, это представление массива этого объекта JSON

поэтому как бы преобразовать этот

{"tags":"[{value: 2,label: 'Dubstep'},{value: 3,label: 'BoysIIMen'},{value: 4,label:'Sylenth1'}]"}

к этому

[{value: 2,label: 'Dubstep'},{value: 3,label: 'BoysIIMen'},{value: 4,label:'Sylenth1'}]

Здесь цикл, который создает массив

String k = "["; 
        List<Tag> tg = audioTaggingService.findTagsByName(q);
        for(int i = 0; i<audioTaggingService.findTagsByName(q).size();i++){
            Tag t = tg.get(i);
            if(i == (tg.size() - 1)){
                k+="{value: "+t.getId()+",label:'"+t.getName()+"'}";
            }else{
                k+="{value: "+t.getId()+",label:'"+t.getName()+"'}";
            }
        }
        k+="]";

Результатом приведенного выше кода является

[{value: 2,label: 'Dubstep'},{value: 3,label: 'BoysIIMen'},{value: 4,label:'Sylenth1'}]
  • 3
    Из вашего примера вы можете просто получить доступ к obj.tags (где obj - ваш JSON-объект), который будет возвращать массив объектов, каждый из которых содержит value и свойство label .
  • 0
    @Gavin Гавин, не могли бы вы привести пример? Мне нужна вторая версия, потому что в настоящее время я использую плагин JQuery TagIt, для которого tagSource должен быть массивом.
Показать ещё 7 комментариев

2 ответа

10

Предполагая, что вы получили ответ на стороне сервера в объекте javascript с именем response, вы можете проанализировать свойство строки tags с помощью функции $.parseJSON. Но сначала вам нужно исправить код на стороне сервера, чтобы он возвращал действительную строку JSON для свойства тегов (в именах свойств JSON должны быть заключены в кавычки):

// This came from the server
var response = {"tags":"[{\"value\": 2,\"label\": \"Dubstep\"},{\"value\": 3,\"label\": \"BoysIIMen\"},{\"value\": 4,\"label\":\"Sylenth1\"}]"};

// Now you could parse the tags string property into a corresponding
// javascript array:
var tags = $.parseJSON(response.tags);

// and at this stage the tags object will contain the desired array
// and you could access individual elements from it:
alert(tags[0].label);

Если по какой-либо причине вы не можете изменить серверную часть script, чтобы предоставить действительный JSON в свойстве tags, вы все равно можете использовать eval вместо $.parseJSON:

var tags = eval(response.tags);

Это не рекомендуемый подход, обычно вам следует избегать использования eval, потому что он выполнит произвольный javascript.

  • 0
    Свойство tags в этом JSON - это строка, содержащая определение массива, на самом деле это не массив.
  • 0
    О, ты прав. Я заметил это. Спасибо за указание на это. Я буду обновлять свой ответ.
Показать ещё 7 комментариев
0
initSelection: function (element, callback) {
                    var data = $(element).val();
                    callback($.parseJSON(data));
                }
  • 0
    Пожалуйста, добавьте некоторые пояснения относительно того, что делает этот код.

Ещё вопросы

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