JSON ontleden in JavaScript?

Ik wil een JSON-tekenreeks in JavaScript ontleden. Het antwoord is zoiets als

var response = '{"result":true,"count":1}';

Hoe kan ik de waarden resulten counthiervan krijgen?


Antwoord 1, autoriteit 100%

De standaardmanier om JSON in JavaScript te ontleden is JSON.parse()

De JSONAPI werd geïntroduceerd met ES5(2011) en is sindsdien geïmplementeerd in > 99% van de browsers op marktaandeel en Node.js. Het gebruik ervan is eenvoudig:

const json = '{ "fruit": "pineapple", "fingers": 10 }';
const obj = JSON.parse(json);
console.log(obj.fruit, obj.fingers);

Antwoord 2, autoriteit 5%

WAARSCHUWING!

Dit antwoord stamt uit een oud tijdperk van JavaScript-programmering waarin er geen ingebouwde manier was om JSON te ontleden. Het advies dat hier wordt gegeven is niet langer van toepassing en waarschijnlijk gevaarlijk. Vanuit een modern perspectief is het ontleden van JSON door jQuery te gebruiken of eval() aan te roepen onzin. Tenzij u IE 7 of Firefox 3.0 moet ondersteunen, is de juiste manier om JSON te ontleden JSON.parse().

Allereerst moet je ervoor zorgen dat de JSON-code geldig is.

Daarna zou ik aanraden om een JavaScript-bibliotheek zoals jQuery of Prototype te gebruiken als je kunt, omdat deze dingen goed worden afgehandeld in die bibliotheken.

Aan de andere kant, als je geen bibliotheek wilt gebruiken en je kunt instaan voor de geldigheid van het JSON-object, zou ik de string gewoon in een anonieme functie stoppen en de eval-functie gebruiken.

Dit wordt niet aanbevolen als u het JSON-object van een andere bron krijgt die niet absoluut vertrouwd is, omdat de eval-functie desgewenst afvallige code toestaat.

Hier is een voorbeeld van het gebruik van de eval-functie:

var strJSON = '{"result":true,"count":1}';
var objJSON = eval("(function(){return " + strJSON + ";})()");
alert(objJSON.result);
alert(objJSON.count);

Als u bepaalt welke browser wordt gebruikt of als u zich geen zorgen maakt over mensen met een oudere browser, kunt u altijd de JSON.parse-methode gebruiken.

Dit is echt de ideale oplossing voor de toekomst.


Antwoord 3, autoriteit 3%

Als je dit van een externe site krijgt, kan het handig zijn om jQuery’s getJSON te gebruiken. Als het een lijst is, kun je er doorheen lopen met $.each

$.getJSON(url, function (json) {
    alert(json.result);
    $.each(json.list, function (i, fb) {
        alert(fb.result);
    });
});

Antwoord 4, autoriteit 2%

Als je JSON 3voor oudere browsers wilt gebruiken, kun je het voorwaardelijk laden met:

<script>
    window.JSON || 
    document.write('<script src="//cdnjs.cloudflare.com/ajax/libs/json3/3.2.4/json3.min.js"><\/scr'+'ipt>');
</script>

Nu is het standaard window.JSON-object voor u beschikbaar, ongeacht welke browser een client gebruikt.


Antwoord 5, autoriteit 2%

Het volgende voorbeeld maakt het duidelijk:

let contactJSON = '{"name":"John Doe","age":"11"}';
let contact = JSON.parse(contactJSON);
console.log(contact.name + ", " + contact.age);
// Output: John Doe, 11

Antwoord 6, autoriteit 2%

Als u een tekenreeksvariabele (een goed gevormde JSON-tekenreeks) doorgeeft aan JSON.parse van MVC @Viewbag met dubbele aanhalingstekens, ”’, als aanhalingstekens, moet u deze verwerken vóór JSON.parse (jsonstring)

   var jsonstring = '@ViewBag.jsonstring';
    jsonstring = jsonstring.replace(/&quot;/g, '"');  

Antwoord 7

Je kunt de eval-functie gebruiken zoals in sommige andere antwoorden. (Vergeet de extra accolades niet.) Je weet waarom als je dieper graaft), of gebruik gewoon de jQuery-functie parseJSON:

var response = '{"result":true , "count":1}'; 
var parsedJSON = $.parseJSON(response);

OF

U kunt deze onderstaande code gebruiken.

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

En je hebt toegang tot de velden met jsonObject.resulten jsonObject.count.

Bijwerken:

Als uw uitvoer undefinedis, moet u DIT antwoord. Misschien heeft je json-tekenreeks een array-indeling. U moet op deze manier toegang krijgen tot de json-objecteigenschappen

var response = '[{"result":true , "count":1}]'; // <~ Array with [] tag
var jsonObject = JSON.parse(response);
console.log(jsonObject[0].result); //Output true
console.log(jsonObject[0].count); //Output 1

Antwoord 8

De gemakkelijkste manier om de parse()methode te gebruiken:

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

dit is een voorbeeld van hoe u waarden kunt verkrijgen:

var myResponseResult = JsonObject.a;
var myResponseCount = JsonObject.b;

Antwoord 9

JSON.parse() converteert elke JSON-tekenreeks die aan de functie is doorgegeven, naar een JSON-object.

Voor een beter begrip drukt u op F12om het Inspect Element van uw browser te openen en gaat u naar de console om de volgende opdrachten te schrijven:

var response = '{"result":true,"count":1}'; // Sample JSON object (string form)
JSON.parse(response); // Converts passed string to a JSON object.

Voer nu het commando uit:

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

Je krijgt output als Object {result: true, count: 1}.

Om dat object te gebruiken, kun je het aan de variabele toewijzen, laten we zeggen obj:

var obj = JSON.parse(response);

Met behulp van objen de dot(.)-operator krijgt u nu toegang tot eigenschappen van het JSON-object.

Probeer de opdracht uit te voeren

console.log(obj.result);

Antwoord 10

Zonder een bibliotheek te gebruiken, kunt u evalgebruiken – de enige keer dat u zou moeten gebruiken. Het is echter veiliger om een bibliotheek te gebruiken.

bijv…

var response = '{"result":true , "count":1}';
var parsedJSON = eval('('+response+')');
var result=parsedJSON.result;
var count=parsedJSON.count;
alert('result:'+result+' count:'+count);

Antwoord 11

Als je wilt

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

je hebt toegang tot de JSON-elementen door JsonObject met (.)punt:

JsonObject.result;
JsonObject.count;

Antwoord 12

Ik dacht dat JSON.parse(myObject)zou werken. Maar afhankelijk van de browser kan het de moeite waard zijn om eval('('+myObject+')')te gebruiken. Het enige probleem dat ik kan aanbevelen om op te letten, is de lijst met meerdere niveaus in JSON.


Antwoord 13

Een gemakkelijke manier om het te doen:

var data = '{"result":true,"count":1}';
var json = eval("[" +data+ "]")[0]; // ;)

Antwoord 14

Als u Dojo Toolkitgebruikt:

require(["dojo/json"], function(JSON){
    JSON.parse('{"hello":"world"}', true);
});

Antwoord 15

Zoals door talloze anderen vermeld, ondersteunen de meeste browsers JSON.parseen JSON.stringify.

Nu zou ik ook willen toevoegen dat als je AngularJSgebruikt (wat ik ten zeerste aanbeveel), het biedt ook de functionaliteit die u nodig heeft:

var myJson = '{"result": true, "count": 1}';
var obj = angular.fromJson(myJson);//equivalent to JSON.parse(myJson)
var backToJson = angular.toJson(obj);//equivalent to JSON.stringify(obj)

Ik wilde alleen de dingen over AngularJS toevoegen om een andere optie te bieden. MERK OP dat AngularJS officieel geen ondersteuning biedt voor Internet Explorer 8 (en oudere versies, wat dat betreft), hoewel uit ervaring blijkt dat de meeste dingen redelijk goed lijken te werken.


Antwoord 16

Als u jQuery gebruikt, is het eenvoudig:

var response = '{"result":true,"count":1}';
var obj = $.parseJSON(response);
alert(obj.result); //true
alert(obj.count); //1

Other episodes