Question

Étant donné une chaîne de données JSON, comment pouvez-vous tourner en toute sécurité en chaîne dans un objet JavaScript?

Évidemment, vous pouvez le faire mal avec quelque chose comme...

var obj = eval("(" + json + ')');

...mais qui nous laisse vulnérables à la chaîne json contenant un autre code, qui semble très dangereux de simplement eval.

Était-ce utile?

La solution

JSON.parse(jsonString) est un pur JavaScript approche, aussi longtemps que vous pouvez garantir raisonnablement navigateur moderne.

Autres conseils

La méthode jQuery est maintenant obsolète.L'utilisation de cette méthode à la place:

let jsonObject = JSON.parse(jsonString);

Réponse originale à cette question en utilisant obsolète fonctionnalités jQuery:

Si vous utilisez jQuery suffit d'utiliser:

jQuery.parseJSON( jsonString );

C'est exactement ce que vous cherchez pour (voir le jQuery la documentation).

Edit:Cette réponse est pour IE < 7, pour les navigateurs modernes vérifier la réponse de Jonathan ci-dessus.

Edit:Cette réponse est obsolète et La réponse de Jonathan ci-dessus (JSON.parse(jsonString)) est aujourd'hui le meilleure réponse.

JSON.org a JSON analyseurs pour de nombreuses langues, dont 4 différentes pour Javascript.Je crois que la plupart des gens considèrent json2.js leur goto mise en œuvre.

Utilisation simple code représenté dans ce qui suit lien sur le site MSDN.

var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';
var contact = JSON.parse(jsontext);

et l'inverse

var str = JSON.stringify(arr);

Je ne suis pas sûr d'autres façons de le faire, mais voici comment vous le faites dans Prototype JSON (tutoriel).

new Ajax.Request('/some_url', {
  method:'get',
  requestHeaders: {Accept: 'application/json'},
  onSuccess: function(transport){
    var json = transport.responseText.evalJSON(true);
  }
});

L'appel evalJSON() à vrai que l'argument assainit la future chaîne.

Cela semble être la question:

Une entrée est reçu, via ajax websocket etc, et il est toujours va être dans un format de Chaîne - mais vous devez le savoir si c'est du JSON.analysée.Trouble de la est que, si vous avez toujours le lancer à travers un JSON.l'analyse, le programme PEUT continuer avec succès, mais vous aurez toujours de voir une erreur jeté dans la console avec le redoutable "Erreur:jeton inattendu"x"".

var data;

try {
  data = JSON.parse(jqxhr.responseText);
} catch (_error) {}

data || (data = {
  message: 'Server error, please retry'
});

Si vous êtes en utilisant jQuery, vous pouvez aussi simplement faire $.getJSON(url, function(data) { });

Ensuite, vous pouvez faire des choses comme data.key1.something, data.key1.something_else, etc.

$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback
});

Le rappel est passé le retour de données, qui seront un objet JavaScript ou un tableau tel que défini par la structure JSON et analysées à l'aide de la $.parseJSON() la méthode.

Juste pour le fun, voici le chemin à l'aide de la fonction :

 jsonObject = (new Function('return ' + jsonFormatData))()

Essayez d'utiliser la méthode avec cet objet de Données.ex:Data='{result:true,count:1}'

try {
  eval('var obj=' + Data);
  console.log(obj.count);
}
catch(e) {
  console.log(e.message);
}

Cette méthode aide vraiment en Nodejs lorsque vous travaillez avec le port série de la programmation

À l'aide de JSON.analyser est probablement la meilleure façon.Voici un exemple démonstration en direct

var jsonRes = '{ "students" : [' +
          '{ "firstName":"Michel" , "lastName":"John" ,"age":18},' +
          '{ "firstName":"Richard" , "lastName":"Joe","age":20 },' +
          '{ "firstName":"James" , "lastName":"Henry","age":15 } ]}';
var studentObject = JSON.parse(jsonRes);

La façon la plus simple à l'aide de parse() méthode:

var response = '{"result":true,"count":1}';
var JsonObject= JSON.parse(response);

ensuite, vous pouvez obtenir les valeurs de la Json éléments, par exemple:

var myResponseResult = JsonObject.result;
var myResponseCount = JsonObject.count;

À l'aide de jQuery comme décrit dans la la documentation:

JSON.parse(jsonString);

J'ai trouvé une "meilleure" façon:

En CoffeeScript:

try data = JSON.parse(jqxhr.responseText)
data ||= { message: 'Server error, please retry' }

En Javascript:

var data;

try {
  data = JSON.parse(jqxhr.responseText);
} catch (_error) {}

data || (data = {
  message: 'Server error, please retry'
});
JSON.parse(jsonString);

json.analyser va changer en objet.

JSON l'analyse est toujours une douleur dans le cul.Si l'entrée n'est pas comme prévu, il renvoie une erreur et une panne de ce que vous faites.Vous pouvez utiliser les minuscules fonction en toute sécurité analyse de votre entrée.Il tourne toujours un objet, même si l'entrée n'est pas valide ou est déjà un objet qui est le mieux pour la plupart des cas.

JSON.safeParse = function (input, def) {
  // Convert null to empty object
  if (!input) {
    return def || {};
  } else if (Object.prototype.toString.call(input) === '[object Object]') {
    return input;
  }
  try {
    return JSON.parse(input);
  } catch (e) {
    return def || {};
  }
};

La conversion de l'objet en JSON, puis l'analyser, fonctionne pour moi, comme:

JSON.parse(JSON.stringify(object))

Si nous avons une chaîne comme ceci:"{\"statut\":1,\"jeton\":\"65b4352b2dfc4957a09add0ce5714059\"}" ensuite, nous pouvons simplement utiliser JSON.analyser les à deux reprises pour convertir cette chaîne de caractères dans un objet JSON:

var sampleString = "{\"status\":1,\"token\":\"65b4352b2dfc4957a09add0ce5714059\"}"
var jsonString= JSON.parse(sampleString)
var jsonObject= JSON.parse(jsonString)

Et tout simplement, nous pouvons extraire des valeurs d'objet JSON à l'aide de:

    // instead of last JSON.parse:
    var { status, token } = JSON.parse(jsonString);

Le résultat sera:

status = 1 and token = 65b4352b2dfc4957a09add0ce5714059

JSON.parse() convertit toute Chaîne JSON passée dans la fonction, pour un Objet JSON.

Pour une Meilleure compréhension appuyez sur F12 pour ouvrir Inspecter l'Élément de votre navigateur et accédez à la console d'écrire des commandes suivantes :-

var response = '{"result":true,"count":1}'; //sample json object(string form)
JSON.parse(response); //converts passed string to JSON Object.

Maintenant, exécutez la commande :-

console.log(JSON.parse(response));

vous obtiendrez en sortie de l'Objet {résultat:vrai, compter:1}.

Pour utiliser cet Objet, vous pouvez l'affecter à la variable disons obj :-

var obj = JSON.parse(response);

Maintenant, en utilisant obj et un point(.) l'opérateur, vous pouvez accéder aux propriétés de l'Objet JSON.

Essayez d'exécuter la commande

console.log(obj.result);

Officiellement documenté:

L' JSON.parse() méthode d'analyse d'une chaîne JSON, la construction de la valeur JavaScript ou de l'objet décrit par la chaîne.Une option reviver la fonction peut être fourni pour effectuer une transformation sur l'objet avant de la restituer.

La syntaxe

JSON.parse(text[, reviver])

Paramètres

texte

La chaîne à parser JSON.Voir l'objet JSON pour une description de la syntaxe JSON.

reviver (facultatif)

Si une fonction, cette prescrit la manière dont la valeur à l'origine produites par l'analyse est transformé, avant d'être renvoyé.

Valeur de retour

L'Objet correspondant à la donnée JSON texte.

Exceptions

Lève une exception SyntaxError si la chaîne à analyser n'est pas valide JSON.

Vous pouvez également utiliser reviver la fonction de filtre.

var data = JSON.parse(jsonString, function reviver(key, value) {
   //your code here to filter
});

pour plus d'informations lire JSON.analyser

Âgées question, je sais, mais personne ne avis cette solution à l'aide de new Function(), une fonction anonyme qui renvoie les données.


Juste un exemple:

 var oData = 'test1:"This is my object",test2:"This is my object"';

 if( typeof oData !== 'object' )
  try {
   oData = (new Function('return {'+oData+'};'))();
  }
  catch(e) { oData=false; }

 if( typeof oData !== 'object' )
  { alert( 'Error in code' ); }
 else {
        alert( oData.test1 );
        alert( oData.test2 );
      }

C'est un peu plus sûr, car il s'exécute à l'intérieur d'une fonction et de ne pas compiler votre code directement.Donc si il y a une déclaration de fonction à l'intérieur, il ne sera pas lié à la fenêtre par défaut de l'objet.

Je l'utilise pour 'compiler' paramètres de configuration des éléments du DOM (par exemple l'attribut data) simple et rapide.

Analyser la chaîne json JSON.parse(), et les données devient un objet JavaScript.

JSON.parse(jsonString)

Ici, JSON représente pour traiter json dataset.

Exemple, Imaginez, nous avons reçu ce texte à partir d'un serveur web:

'{ "name":"John", "age":30, "city":"New York"}'

Pour analyser en objet json :

var obj = JSON.parse('{ "name":"John", "age":30, "city":"New York"}'); 

Ici obj est respectifs objet JSON qui ressembler à ce qui suit.

{ "name":"John", "age":30, "city":"New York"}

Pour récupérer la valeur utilisée .opérateur Exemple :

obj.name // John
obj.age //30

Le transfert à l'opposé, Convertir un objet JavaScript dans une chaîne JSON.stringify().

Résumé:

Javascript (à la fois navigateur et NodeJS) est intégré dans le JSON objet.Sur cet Objet sont 2 méthodes pratiques pour traiter les JSON.Ils sont les suivants:

  1. JSON.parse() Prend JSON comme argument, retourne JS objet
  2. JSON.stringify() Prend JS objet comme argument renvoie JSON objet

D'autres applications:

En outre, pour la très commodément traiter avec JSON ils ont peut être utilisée pour d'autres moyens.La combinaison des deux JSON méthodes nous permet de rendre très facile de faire de profondeur clones de tableaux ou d'objets.Par exemple:

let arr1 = [1, 2, [3 ,4]];
let newArr = arr1.slice();

arr1[2][0] = 'changed'; 
console.log(newArr); // not a deep clone

let arr2 = [1, 2, [3 ,4]];
let newArrDeepclone = JSON.parse(JSON.stringify(arr2));

arr2[2][0] = 'changed'; 
console.log(newArrDeepclone); // A deep clone, values unchanged

Si votre JavaScript sont dans Mootools l' JSON.parse seront Anonymes par le Cadre.
Valide la syntaxe en toute sécurité de transformer une chaîne JSON en objet doit être:

var object = JSON.decode(string[, secure]);

En outre, un JSON Request est peut soulever un objet capable d'analyser directement.
Vous pouvez cek comment tourner json données brutes ici:

http://jsfiddle.net/chetabahana/qbx9b5pm/

Essayez ceci.Ce texte est écrit en caractères d'imprimerie.

         export function safeJsonParse(str: string) {
               try {
                 return JSON.parse(str);
                   } catch (e) {
                 return str;
                 }
           }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top