2009-06-29 4 views
2

Ok, d'abord écoutez-moi en regardant cette url:Impossible d'obtenir <pour apparaître dans la chaîne JSON

http://api.flickr.com/services/feeds/photos_public.gne?format=json

Remarquez comment la chaîne de description a html non codé en elle, comme < ,>, etc.

Voici comment je suis retourné mon JSON en utilisant ASP.NET 3.5 et C#:

context.Response.ContentType = "text/plain"; 
context.Response.Charset = Encoding.UTF8.ToString(); 

int i = 1; 

List<Product> products = GetTestProducts(); 
List<CrImageList> imageList = new List<CrImageList>(); 

foreach(Product p in products) 
{ 
    string imageTag = HttpUtility.HtmlEncode(string.Format(@"<img src=""{0}"" alt="""">", ImageUrl(p.Image, false))); 

    imageList.Add(new CrImageList{ImageTag = imageTag}); 
    i++; 
} 

string jsonString = imageList.ToJSON(); 
context.Response.Write(jsonString); 

et voici le JSON retourné par ce code qui est appelé quand je salut t mon .ashx et appelle ce code dans la méthode qui contient:

[{"ImageTag":"&lt;img src=&quot;http://www.ourdomain.com/image/540.jpg&quot; alt=&quot;&quot;&gt;"},{"ImageTag":"&lt;img src=&quot;http://www.ourdomain.com/image/642.jpg&quot; alt=&quot;&quot;&gt;"}] 

Maintenant, comment puis-je obtenir les caractères codés pour montrer réellement comme des caractères HTML dans la chaîne de texte retourné par mon JSON?

Je veux < pour montrer < et ainsi de suite comme Flickr était capable de faire dans leur JSON.

Si je prends le HtmlEncode:

string.Format (@ "", ImageUrl (p.Image, false));

Alors je commence à obtenir le/u00 dans ma chaîne:

[{"ImageTag":"\u003cimg src=\"http://www.example.com/cat_image/540.jpg\" alt=\"\"\u003e"}, 
... 

Alors, pourquoi ne pas le JSON Flickr retour tout sauf html propre dans leur description?

+3

Vous devez nous montrer ce que le toJSON méthode ne – Jab

Répondre

5

Utilisez-vous la chaîne ailleurs? Si vous l'utilisez en Javascript, il ne devrait pas importer que les caractères < > échappent.

<script type="text/javascript" defer="defer"> 
document.body.innerHTML = "\u003cimg src=\"http://www.example.com/cat_image/540.jpg\" alt=\"\"\u003e"; 
</script> 

est le même que:

<script type="text/javascript" defer="defer"> 
document.body.innerHTML = "<img src=\"http://www.example.com/cat_image/540.jpg\" alt=\"\">"; 
</script> 

En Javascript, ces chaînes sont à peu près la même chose quand il s'agit de faire quelque chose avec eux.

3

Si vous ne souhaitez pas que les valeurs soient codées, pourquoi les exécutez-vous via la méthode HttpUtility.HtmlEncode?

Si le toJSON n'est pas quelque chose que vous pouvez changer d'arrêter unicode codant pour le caractère, alors vous aurez juste à faire remplacer après l'appeler ...

string jsonString = imageList.ToJSON(); 
jsonString = jsonString.Replace("\u003c", "<").Replace("\u003e", ">"); 
context.Response.Write(jsonString); 
+0

J'ai enlevé l'Encode, puis j'ai obtenu \ u003 que je n'avais aucune idée de ce que c'était ... – PositiveGuy

+0

Il est unicode. Je me risquerais à deviner que votre encodeur JSON est par défaut à une forme d'unicode. Peu importe, le client devrait être capable de l'interpréter. –

Questions connexes