在javascript中解析来自php的json时的奇怪行为

时间:2013-05-05 21:56:53

标签: php jquery json

我在解析来自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":""
   }

然而,在我解析之后,这就是结果:

javascript object from parsed json

例如,artikels.0.maakwijze.maakwijze_type设置为undefined,而在原始json中,它设置为'lint'。

奇怪的是,如果我只是将原始json复制到chrome控制台并使用相同的函数jQuery.parseJSON('复制文本')解析它,所有值都可以

我还用标准的JSON.parse替换了jQuery.parseJSON,但这给了我相同的结果

任何想法是什么导致了这个?

谢谢!

1 个答案:

答案 0 :(得分:3)

  

在客户端我只使用jQuery来解析json数据。

$.ajax({
......
    success: function(data){
        articleObject = jQuery.parseJSON(data); 

如果您的服务器正在返回Content-Type: application/jsondata已经成为已解析的对象。你不想再解析它。

没有 jQuery.parseJSON(data)works for mesource)。