В настоящее время я получаю объект 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'}]
Предполагая, что вы получили ответ на стороне сервера в объекте 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.
tags
в этом JSON - это строка, содержащая определение массива, на самом деле это не массив.
initSelection: function (element, callback) {
var data = $(element).val();
callback($.parseJSON(data));
}
obj.tags
(где obj - ваш JSON-объект), который будет возвращать массив объектов, каждый из которых содержитvalue
и свойствоlabel
.