Saltar al contenido

La forma más eficiente de corregir un JSON no válido

Después de de una larga compilación de información pudimos resolver esta dificultad que suelen tener muchos los lectores. Te compartimos la solución y esperamos resultarte de mucha ayuda.

Solución:

Necesita ejecutar esto a través de JavaScript. Inicie un analizador de JavaScript en .red. Dar el string como entrada a JavaScript y usar JavaScript nativo JSON.stringify para convertir:

obj = 
    "user":'180111',
    "title":'I'm sure "E pluribus unum" means 'Out of Many, One.' nnhttp://en.wikipedia.org/wiki/E_pluribus_unum.nn',
    "date":'2007/01/10 19:48:38',
    "id":"3322121",
    "previd":"112211",
    "body":"'You' can "read" more here [url=http://en.wikipedia.org/?search=E_pluribus_unum]E pluribus unum[/url]'s. Cheers \*/ :/",
    "from":"112221",
    "username":"mikethunder",
    "creationdate":"2007/01/10 14:04:49"


console.log(JSON.stringify(obj));
document.write(JSON.stringify(obj));

Por favor, recuerde que el string (o más bien el objeto) que tiene no es JSON válido y no se puede analizar con una biblioteca JSON. Primero debe convertirse a JSON válido. Sin embargo, es JavaScript válido.

Para completar esta respuesta: Puedes usar JavaScriptSerializer en .Red. Para esta solución, necesitará los siguientes ensamblajes:

  • Sistema.Net
  • Sistema.Web.Script.Serialización

    var webClient = new WebClient();
    string readHtml = webClient.DownloadString("uri to your source (extraterrestrial)");
    var a = new JavaScriptSerializer();
    
    Dictionary results = a.Deserialize>(readHtml);
    

Qué tal esto:

 string AlienJSON = "your alien JSON";
 JavaScriptSerializer js = new JavaScriptSerializer();
 string ProperJSON = js.Serialize(js.DeserializeObject(AlienJSON));

O simplemente consuma el objeto después de deserializarlo en lugar de convertirlo de nuevo a string y pasándolo a un analizador JSON para un dolor de cabeza adicional

Como Mouser también mencionó, debe usar System.Web.Script.Serialization, que está disponible al incluir system.web.extensions.dll en su proyecto y, para hacerlo, debe cambiar el marco de destino en las propiedades del proyecto para .NET Framework 4.

EDITAR

Truco para consumir objeto deserializado está usando dynamic

JavaScriptSerializer js = new JavaScriptSerializer();
dynamic obj = js.DeserializeObject(AlienJSON);

para JSON en su pregunta simplemente use

string body = obj["body"];

o si su JSON es un array

if (obj is Array) 
    foreach(dynamic o in obj)
        string body = obj[0]["body"];
        // ... do something with it
    

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *