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'}]
4

2 回答 2

10

假设您在一个名为的 javascript 对象中获得了服务器端响应,您可以使用该函数response解析tags字符串属性。$.parseJSON但首先您需要修复服务器端代码,以便它为 tags 属性返回一个有效的 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);

如果由于某种原因您无法修改服务器端脚本以在tags属性中提供有效的 JSON,您仍然可以使用eval而不是$.parseJSON

var tags = eval(response.tags);

这不是推荐的方法,通常你应该避免使用eval,因为它会执行任意的 javascript。

于 2013-01-30T10:19:02.997 回答
0
initSelection: function (element, callback) {
                    var data = $(element).val();
                    callback($.parseJSON(data));
                }
于 2014-11-18T17:51:33.620 回答