javascript - auslesen - json syntax




Eine JSON-Zeichenfolge sicher in ein Objekt umwandeln (14)

Wie können Sie diese Zeichenfolge anhand einer Zeichenfolge aus JSON-Daten sicher in ein JavaScript-Objekt umwandeln?

Natürlich können Sie das mit etwas unsicherem ...

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

... aber das macht uns anfällig für die JSON-Zeichenkette, die anderen Code enthält, was sehr einfach erscheint.


Ältere Frage, ich weiß, aber niemand bemerkt diese Lösung mit der new Function() , eine anonyme Funktion, die die Daten zurückgibt.

Nur ein Beispiel:

 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 );
      }

Dies ist ein wenig sicherer, da es innerhalb einer Funktion ausgeführt wird und nicht direkt in Ihrem Code kompiliert wird. Wenn also eine Funktionsdeklaration darin enthalten ist, ist sie nicht an das Standardfensterobjekt gebunden.

Ich verwende dies, um Konfigurationseinstellungen von DOM-Elementen (zum Beispiel das Datenattribut) einfach und schnell zu "kompilieren".


Das Konvertieren des Objekts in JSON und das anschließende Parsen funktioniert für mich wie folgt:

JSON.parse(JSON.stringify(object))

Die Verwendung von JSON.parse ist wahrscheinlich der beste Weg. Hier ist ein Beispiel Live-Demo

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);

Die jQuery-Methode ist jetzt veraltet. Verwenden Sie stattdessen diese Methode:

let jsonObject = JSON.parse(jsonString);

Ursprüngliche Antwort mit veralteter jQuery-Funktionalität :

Wenn Sie jQuery verwenden, verwenden Sie einfach:

jQuery.parseJSON( jsonString );

Es ist genau das, wonach Sie suchen (siehe die jQuery- documentation ).


Edit: Diese Antwort ist veraltet und Jonathan's Antwort oben ( JSON.parse(jsonString) ) ist jetzt die beste Antwort.

JSON.org hat JSON Parser für viele Sprachen, darunter 4 verschiedene für Javascript. Ich glaube, dass die meisten Leute json2.js ihre goto Implementierung betrachten würden.


Ich bin mir nicht sicher über andere Möglichkeiten, es zu tun, aber hier ist, wie Sie es in Prototype (JSON-Tutorial) tun.

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

Der Aufruf von evalJSON () mit true als Argument bereinigt die eingehende Zeichenfolge.


Ich habe einen "besseren" Weg gefunden:

In CoffeeScript:

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

In Javascript:

var data;

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

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

JSON Parsing ist immer Schmerz in Arsch. Wenn die Eingabe nicht wie erwartet ist, löst sie einen Fehler aus und stürzt ab, was Sie tun. Sie können die folgende kleine Funktion verwenden, um Ihre Eingaben sicher zu parsen. Es dreht immer ein Objekt, selbst wenn die Eingabe nicht gültig ist oder bereits ein Objekt ist, das für die meisten Fälle besser ist.

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 || {};
  }
};

Nur zum Spaß, hier ist der Weg über die Funktion:

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

Sie können auch die reviver Funktion zum Filtern verwenden.

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

Für weitere Informationen lesen Sie JSON.parse(jsonString)


Wenn Sie jQuery , können Sie auch einfach $.getJSON(url, function(data) { });

Dann können Sie Dinge wie data.key1.something , data.key1.something_else usw. tun.


Wenn Sie möchten, dass diese Methode auf diese Weise verwendet werden kann. Hier Datenobjekt, das Sie wollen: Data = '{result: true, count: 1}'

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

Diese Methode hilft wirklich in Nodejs Wenn Sie mit der Programmierung von seriellen Ports arbeiten


Offiziell dokumentiert :

Die JSON.parse() -Methode analysiert eine JSON-Zeichenfolge und erstellt den JavaScript-Wert oder das Objekt, das von der Zeichenfolge beschrieben wird. Eine optionale reviver Funktion kann bereitgestellt werden, um eine Transformation für das resultierende Objekt durchzuführen, bevor es zurückgegeben wird.

Syntax

JSON.parse(text[, reviver])

Parameter

Text

Die Zeichenfolge, die als JSON analysiert werden soll. Im JSON-Objekt finden Sie eine Beschreibung der JSON-Syntax.

Beleben (optional)

Wenn es sich um eine Funktion handelt, schreibt diese vor, wie der ursprünglich vom Parsen erzeugte Wert transformiert wird, bevor er zurückgegeben wird.

Rückgabewert

Das Objekt, das dem angegebenen JSON-Text entspricht.

Ausnahmen

Es wird eine SyntaxError-Ausnahme ausgelöst, wenn die zu analysierende Zeichenfolge nicht JSON ist.


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

Der Rückruf wird an die zurückgegebenen Daten übergeben, bei denen es sich um ein JavaScript-Objekt oder $.parseJSON() das von der JSON-Struktur definiert und mit der $.parseJSON() Methode analysiert wird.







json