JSON.parse没有解析Json字符串。使用JavaScriptSerializer进行序列化

时间:2013-01-29 13:43:36

标签: javascript .net javascriptserializer

我有一个从控制器传递到视图的序列化字符串:

控制器:

var serialize = new JavaScriptSerializer();
return Json(new
{
data = serialize.Serialize(obj)
}, JsonRequestBehavior.AllowGet);

Json字符串:

[{"indiceName":"Caracter","indiciId":24,"indiceId":1,"tamanhoIndice":10,"mask":null,"indiceObr":1},

{"indiceName":"Numérico","indiciId":25,"indiceId":2,"tamanhoIndice":10,"mask":null,"indiceObr":0},

{"indiceName":"AlfaNumérico","indiciId":26,"indiceId":3,"tamanhoIndice":10,"mask":null,"indiceObr":0}]

据我所知,现代浏览器应该能够用简单的方式解析该字符串 JSON.parse()来

查看:

success: function (data) 
         {
            $('.dinamic').remove();
            console.log(data);
            var obj2 = JSON.parse(data);
            console.log(obj2);
         }

我能够在第一个console.log中看到该字符串,但是我从第二个中得不到任何内容。 还有什么我应该看的东西,因为我读过的所有帖子只会像单个JSON.parse一样简单。 我正在使用最新版本的谷歌浏览器,Firefox和IE,所以它应该工作。

1 个答案:

答案 0 :(得分:2)

虽然你的success函数没有显示在给出的其他AJAX选项的上下文中,但我猜你正在传递{j}的dataType选项,或者正在使用$.getJSON或类似的东西。

如果是这种情况,jQuery在将其传递给success时已经为您解析了JSON,因此您不需要(也不能)再次解析它。您可以简单地使用您的数据结构(data[0]. indiceName等)。

(以下代码在http://jaaulde.com/test_bed/GuilhermeLongo/生效)

考虑以下PHP(存储在 json.php 中):

<?php
exit('[{"indiceName":"Caracter","indiciId":24,"indiceId":1,"tamanhoIndice":10,"mask":null,"indiceObr":1},{"indiceName":"Numérico","indiciId":25,"indiceId":2,"tamanhoIndice":10,"mask":null,"indiceObr":0},{"indiceName":"AlfaNumérico","indiciId":26,"indiceId":3,"tamanhoIndice":10,"mask":null,"indiceObr":0}]');

以下JS:

<script src="http://code.jquery.com/jquery.min.js"></script>
<script>
  $.ajax({
    url: 'json.php',
    type: 'get',
    dataType: 'json',
    success: function (data) {
      console.log(data[0]);
      console.log(data[0].indiceName);
    },
    error: function () {
      throw new Error('AJAX request error occurred.');
    }
  });
</script>

导致以下输出的日志信息:

GET http://jaaulde.com/test_bed/GuilhermeLongo/json.php
    200 OK
    99ms    
    jquery.min.js (line 3)

Object
    {indiceName="Caracter", indiciId=24, indiceId=1, more...}/test_...eLongo/
    (line 8)

Caracter