我在解析来自php源(symfony2)的JSON响应时遇到了一个奇怪的问题。这可能是非常微不足道的事情,但我对javascript的熟练程度不高,所以已经失去了很多时间。
我的数据库中有一个序列化的php数组,我将其反序列化,然后转换为JSON。
$response->setContent(json_encode(unserialize($onderdeel->getArticles())));
在客户端我只使用jQuery来解析json数据。
$.ajax({
......
success: function(data){
articleObject = jQuery.parseJSON(data);
}
});
然而,这给了我一些奇怪的结果,一些值设置为未定义,而它们应该有一个值。但是有些价值还可以。
这是我在解析之前从php脚本获得的原始结果:
{
"onderdeel":{
"onderdeel_id":"1546",
"onderdeel_type":"overgordijnen160",
"onderdeel_naam":"",
"onderdeel_opmerkingen":"",
"berekend_prijs":"0",
"status":"",
"active_artikel_id":"0",
"naam_ruimte":"",
"opmerkingen":""
},
"artikels":[
{
"ruimte":"",
"opmerkingen":"",
"korting":"",
"berekend_aantal_banen":"2",
"aantal_banen_zelf_ingegeven":"",
"berekend_hoeveelheid":"400",
"berekend_multiplicator":"1.9",
"berekend_valide":"",
"berekend_prijs_met_korting":"0.00",
"berekend_prijs":"20040040.00",
"stap2":{
"valide":"valide",
"hoogte":"100",
"breedte":"100",
"banen":"stel",
"stof":{
"id":"9",
"naam":"AGRA",
"modelnummer":"123456",
"stofbreedte":"140.00",
"rapporthoogte":"100.00",
"kleur":"nul",
"prijspermeter":"100.00",
"wasvoorschriften":"COOL WASH COOL IRON",
"stock":" "
},
"railtype":{
"id":"7",
"naam":"rails type 1",
"modelnummer":"RT-2",
"stock":"200.00 stuks",
"rapporthoogte":"null",
"prijspermeter":"null",
"wasvoorschriften":"null"
}
},
"maakwijze":{
"status":"",
"maakwijze_type":"lint",
"plooi":"",
"retour_plooi":"",
"cm_plooi":"",
"hoofdje":"100",
"berekende_string":"LINT > gewone voering",
"voering_string":"gewone voering",
"voering":{
"voering_id":"",
"voering_prijs":"",
"voering_onderdeel":"",
"voering_type":""
},
"voering_aan":"true",
"confectie":{
"confectie_id":"2",
"confectie_prijs":"10000000.00",
"confectie_zoom":"25.31",
"confectie_onderdeel":"OG < 160",
"confectie_type":"LINT > gewone voering"
},
"valide":"valide",
"loodjes":"loodjes"
},
"prijs":{
"prijs_valide":"",
"prijs_korting":"",
"prijs_plaatsing":"",
"prijs_berekend_voor_artikel":"",
"prijs_berekend_voor_artikel_met_korting":"",
"prijs_berekend_stofprijs":"40000",
"prijs_berekend_confectieprijs":"20000000",
"prijs_berekend_prijslood":"40",
"prijs_berekend_voering":"0",
"prijs_railtype_prijs":""
}
}
],
"onderdeel_naam":"",
"onderdeel_opmerkingen":""
}
然而,在我解析之后,这就是结果:
例如,artikels.0.maakwijze.maakwijze_type设置为undefined,而在原始json中,它设置为'lint'。
奇怪的是,如果我只是将原始json复制到chrome控制台并使用相同的函数jQuery.parseJSON('复制文本')解析它,所有值都可以
我还用标准的JSON.parse替换了jQuery.parseJSON,但这给了我相同的结果
任何想法是什么导致了这个?
谢谢!
答案 0 :(得分:3)
在客户端我只使用jQuery来解析json数据。
$.ajax({ ...... success: function(data){ articleObject = jQuery.parseJSON(data);
如果您的服务器正在返回Content-Type: application/json
,data
将已经成为已解析的对象。你不想再解析它。
没有 jQuery.parseJSON(data)
,works for me(source)。