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.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;
于 2013-07-15T05:55:31.163 に答える