如何正确解码使用Html.Raw(Json.Encode(Model))编码的JSON字符串?

时间:2013-07-15 05:47:11

标签: javascript jquery asp.net-mvc json razor

我正在将一些模型数据编码为这样的html元素:

@Html.Raw(Json.Encode(Model));

返回的json字符串如下所示:

{"TestList":[{"FrequencyType":"1X","GCDs":"585.6","Identifier":"6144","SeqNo":9306,"SeqNoSpecified":true,"TSeqNo":8314,"TSeqNoSpecified":true,"TestDescr":"HBsAg"},{"FrequencyType":"1X","GCDs":"585.6","Identifier":"6124","SeqNo":9295,"SeqNoSpecified":true,"TSeqNo":8315,"TSeqNoSpecified":true,"TestDescr":"HCV Ab"},{"FrequencyType":"1X","GCDs":"585.3","Identifier":"6","SeqNo":9729,"SeqNoSpecified":true,"TSeqNo":8309,"TSeqNoSpecified":true,"TestDescr":"HD Monthly LS"}],"Frequency":[{"Key":"ANNUAL","Value":"Annually"},{"Key":"BIMONTH","Value":"Bi-Monthly"},{"Key":"BIWEEK","Value":"Bi-Weekly"},{"Key":"MON","Value":"Monthly"},{"Key":"1X","Value":"One Time"},{"Key":"QTR","Value":"Quarterly"},{"Key":"SMAN","Value":"Semi-Annual"},{"Key":"WEEK","Value":"Weekly"}]};

当我尝试使用JSON.parse解析此问题时,出现错误:

arrayTestList = [];
var jsonTestList = $('#TestList').text();
jsonTestList = JSON.stringify(jsonTestList);
arrayTestList = JSON.parse(jsonTestList);
alert(arrayTestList.TestList[0]); // <===== this line is failing

Unable to get value of the property '0': object is null or undefined

如何将此jsonTestList字符串转换为javascript数组,以便我可以正确访问arrayTestList的元素?

修改

抱歉,我忘了提及我的编辑。基本上javascript代码在部分视图2内。我是json编码模型的代码在另一个部分视图1.从PV 2,我无法访问PV 1的模型对象,所以我只是将内容转储到div标记,以便我可以访问此列表TestList元素。

3 个答案:

答案 0 :(得分:3)

尝试删除此行:

jsonTestList = JSON.stringify(jsonTestList);

jsonTestList已经是JSON字符串

答案 1 :(得分:2)

问题现已解决。

我收到的字符无效,但无法立即识别出导致问题的字符。我发现我的JSON字符串无效,因为Json.Encode方法输出了尾随分号。我验证了JSON字符串@ http://jsonlint.com

删除分号后,json字符串将作为JavaScript数组填充到arrayTestList对象中。

现在正如上面的答案中所提到的那样,这是有效的,不需要JSON.stringify

var arrayTestList = [];
var jsonTestList = $('#TestList').text().replace(";","");
arrayTestList = JSON.parse(jsonTestList);
alert(arrayTestList.TestList[0]); 

答案 2 :(得分:1)

您为什么使用Json.Encode?同样在您的代码中,为什么在编写冗余代码时首先使用JSON.stringifyJSON.parse相同的对象。

jsonTestList = JSON.stringify(jsonTestList);
arrayTestList = JSON.parse(jsonTestList);

根据我的理解,只有Html.Raw才能正常工作

在JavaScript中

var jsonObject = @Html.Raw(Model.TestList); //Here you will get JavaScript Object
var jsonTestList =  jsonObject.TestList;