2013-05-05 135 views
1

解析来自php源代码(symfony2)的JSON响应时出现了一个奇怪的问题。这可能是非常微不足道的,但我不熟悉javascript,所以已经在这上面花了很多时间。解析JSON来自php中的json时的奇怪行为

我有一个序列化的PHP数组在我的数据库中,我反序列化,然后转换为JSON。

$response->setContent(json_encode(unserialize($onderdeel->getArticles()))); 

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

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

     } 
    }); 

但是这给了我一些奇怪的结果,有些值被设置为undefined,而他们应该有一个值。但有些值是可以的。

这是原始的结果我从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复制到铬控制台和具有相同功能的jQuery.parseJSON(“复制文本”)解析它的所有值都OK

我也换成了jQuery。 parseJSON与标准的JSON.parse,但这给了我相同的结果

任何想法是什么原因造成的?

谢谢!

+0

解析数据后,你对数据做了什么吗? – Musa 2013-05-05 22:00:37

回答

3

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

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

如果你的服务器返回Content-Type: application/jsondata已经是一个解析的对象。你不想再解析它。

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

+1

或者,只需提供'dataType:json'服务器不发送标题,它就会自动解析。 – Ohgodwhy 2013-05-05 22:01:58

+0

@Ohgodwhy:是的。尽管如此,服务器应该提供正确的内容类型。 – 2013-05-05 22:02:23

+0

从我的结束100%的协议;但为了以防万一! – Ohgodwhy 2013-05-05 22:02:59