2

我正在将一些模型数据编码到一个 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元素。

4

3 回答 3

3

尝试删除此行:

jsonTestList = JSON.stringify(jsonTestList);

jsonTestList已经是一个 JSON 字符串

于 2013-07-15T05:50:43.443 回答
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]); 
于 2013-07-15T07:16:07.323 回答
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;
于 2013-07-15T05:55:31.163 回答