我正在将一些模型数据编码为这样的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
元素。
答案 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.stringify
和JSON.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;