Comment décoder correctement une chaîne JSON codé à l'aide de Html.Raw(Json.Coder(Modèle))?
Je suis d'encodage de certains modèle de données dans un élément html comme ceci:
@Html.Raw(Json.Encode(Model));
La chaîne json retourné ressemble à ceci:
{"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"}]};
Quand j'essaie d'analyser ce à l'aide de JSON.parse
, j'obtiens une erreur:
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
Comment puis-je convertir ce jsonTestList
chaîne dans un tableau javascript afin que je puisse accéder à des éléments de arrayTestList
correctement?
Edit:
Désolé, j'ai oublié de mentionner mon montage. Fondamentalement code javascript ci-dessus est à l'intérieur d'une Vue Partielle 2. Le code où je suis encodage json le modèle est dans une autre Vue Partielle 1. À partir de P V 2, je ne peut pas accéder au modèle objet de P V 1, donc je suis en train de verser le contenu dans un div
balise, afin que je puisse accéder à cette liste TestList
élément.
- Notez que l'utilisation de
Html.Raw
est dangereux. si votre objet json champs ne sont pas désinfectés, vous êtes ouvert aux attaques XSS. par exemple. une de vosTestDescr
propriétés de "</div><script>alert('piraté')</script>" (en supposant que votre json est écrit à l'intérieur d'un élément div). Quand c'est sorti, il va fermer votre ouverture élément div, et le navigateur va alors interpréter la balise de script suivante dans le cadre du dom html et d'exécuter tout ce qui est à l'intérieur.
Vous devez vous connecter pour publier un commentaire.
Essayez de supprimer cette ligne:
jsonTestList
est déjà une chaîne JSON0x800a03f6 - Microsoft JScript runtime error: Invalid character
si je supprime la ligne contenant le JSON.stringify.Le problème est maintenant résolu.
Je recevais un caractère non valide, mais ne pouvait pas reconnaître immédiatement le caractère a été à l'origine du problème. J'ai trouvé que ma chaîne JSON n'est pas valide en raison de la point-virgule de fin qui a été sortie par la
Json.Encode
méthode. J'ai validé la chaîne JSON @ http://jsonlint.com.Une fois que j'ai enlevé le point-virgule, la chaîne json est rempli comme un tableau JavaScript dans
arrayTestList
objet.Maintenant tout cela fonctionne, comme mentionné dans les deux réponses ci-dessus,
JSON.stringify
n'est pas nécessaire.Pourquoi êtes-vous à l'aide de
Json.Encode
? Également dans votre code, pourquoi êtes-vous de l'écriture de code redondant d'abord que vous utilisezJSON.stringify
et laJSON.parse
même objet.Selon ma compréhension juste
Html.Raw
travailleraEn JavaScript
@Html.Raw(Json.Encode(Model.TestList));
à@Html.Raw(Json.Encode(Model));
, Pouvez-vous nous dire exactement ce que vous voulez atteindre en JavaScript? Peut-être il ya une meilleure façon d'y parvenir.