Konvertieren einer Zeichenfolge in ein JSON-Objekt

147

Wie lässt du JS denken, dass ein String JSON ist?

Ich habe eine Funktion, die nur funktioniert, wenn JSON-Objekt an sie übergeben wird. Wenn ich ihm eine Zeichenfolge mit demselben Format wie JSON übergebe, funktioniert dies nicht. Daher möchte ich diese Funktion glauben lassen, dass die an sie übergebene Zeichenfolge ein JSON ist. Die Zeichenfolge liegt tatsächlich im JSON-Format vor.

Ich habe auch folgendes versucht. Ich habe den String über Ajax eingegeben, mit dem Parameter "handle as" als "JSON", und als ich das Ergebnis an die Funktion übergeben habe, funktioniert es.

Also habe ich festgestellt, dass das Problem nicht bei der Zeichenfolge liegt. Wie konvertiere ich diesen String in JSON? Wenn ich dieselbe Zeichenfolge über eine Ajax-Anfrage erhalte und sie dann an die Funktion übergebe, funktioniert sie, während die direkte Übergabe nicht funktioniert.

Die Zeichenfolge lautet wie folgt:

  {
     "data": [
   {
  "id": "id1",
      "fields": [
        {
          "id": "name1",
          "label": "joker",
          "unit": "year"
        },
         {"id": "name2", "label": "Quantity"},
    ],
      "rows": [    data here....

and closing braces..
Zer0
quelle
2
Ihr Titel ist irreführend. Basierend auf dem Inhalt Ihrer Frage würde ich eher sagen, dass Sie eine Zeichenfolge, die JSON enthält, in ein JavaScript-Objekt / Array konvertieren möchten.
Felix Kling
OK, ich habe es gelöst. Es gab ein \ n in der Zeichenfolge. Jetzt müssen Sie nur noch herausfinden, wie Sie JSON.parse damit verwenden.
Zer0
Ok, ich habe es behoben. Goto jsonlint.com und dort setzen Sie Ihre String. Wenn es korrekt ist, können Sie JSONParse verwenden, um dasselbe zu erreichen.
Zer0
Falls jemand dies liest, soll der Titel "Konvertieren eines JSON-Strings in ein Objekt" sein
Chris G

Antworten:

351
var obj = JSON.parse(string);

Wo stringist deine JSON-Saite?

Kshitij
quelle
Das funktioniert nicht. Es wird ein Fehler "SyntaxError: JSON.parse: unerwartetes Zeichen" ausgegeben. An der Zeichenfolge ist nichts auszusetzen, da kein Problem auftritt, wenn ich dieselbe Zeichenfolge über eine Ajax-Anforderung erhalte und sie als "JSON" behandle.
Zer0
Bitte posten Sie Ihre akute JSON-Zeichenfolge
Kshitij
{"data": [{id ": - Sie vermissen hier ein doppeltes Anführungszeichen, dh Sie beginnen das doppelte Anführungszeichen von id
Kshitij
2
Wenn ich es über Ajax bekomme, funktioniert es so, als würde es die Antwort als JSON behandeln. Also denke ich, ich muss dies in ein JSON-Objekt konvertieren.
Zer0
2
Am Ende ging ich zu jsonlint.com und stellte sicher, dass mein Json Recht hat
Zer0
26

Sie können das JSON.parse()dafür verwenden.

Siehe Dokumente bei MDN

Beispiel:

var myObj = JSON.parse('{"p": 5}');
console.log(myObj);
Sarfraz
quelle
1
Das funktioniert nicht. Es wird ein Fehler "SyntaxError: JSON.parse: unerwartetes Zeichen" ausgegeben. An der Zeichenfolge ist nichts auszusetzen, da kein Problem auftritt, wenn ich dieselbe Zeichenfolge über eine Ajax-Anforderung erhalte und als "JSON" behandle.
Zer0
2
@ Zer0: Sie sollten Ihre Frage so aktualisieren, wie Sie es zusammen mit Ihrer JSON-Zeichenfolge versuchen.
Sarfraz
4
@ Zer0: Wir können nur nach bestem Wissen antworten. Sie sagen, Sie haben eine JSON-Zeichenfolge, wir antworten entsprechend. Es scheint, dass Ihre Zeichenfolge anders ist. Wenn Sie sie veröffentlichen, können wir dies unter Berücksichtigung dieser Frage beantworten. Wenn Sie eine Frage zur Codierung stellen, sind Code / Daten unverzichtbar.
Felix Kling
7

Ich hatte das gleiche Problem mit einer ähnlichen Saite wie Ihrer

{id:1,field1:"someField"},{id:2,field1:"someOtherField"}

Das Problem hierbei ist die Struktur der Zeichenfolge. Der JSON-Parser hat nicht erkannt, dass in diesem Fall zwei Objekte erstellt werden müssen. Also, was ich getan habe, ist irgendwie albern, ich habe nur meine Zeichenfolge neu strukturiert und die damit verbundene hinzugefügt, die []der Parser erkannt hat

var myString = {id:1,field1:"someField"},{id:2,field1:"someOtherField"}
myString = '[' + myString +']'
var json = $.parseJSON(myString)

Ich hoffe es hilft,

Wenn jemand einen eleganteren Ansatz hat, teilen Sie ihn bitte mit.

Abraham
quelle
In Ihrem obigen Code haben Sie myStringfalsch konstruiert . Es ist keine Zeichenfolge und JSON ist falsch formatiert. Ihre zweite Zeile würde dann überflüssig. Folgendes sollte es sein: var myString = '[{"id":1,"field1":"someField"},{"id":2,"field1":"someOtherField"}]' Ich weiß, dass dies ein ziemlich alter Beitrag ist, aber ich dachte, ich würde Klarheit schaffen, falls jemand ihn findet.
James Eberhardt
Ich löste mein Problem mit $.parseJSONwo JSON.parsenicht funktionierte und warf einen FehlerJSON.parse is not a function
brasofilo
3

Konvertieren Sie die Zeichenfolge mit Object Mapper in HashMap ...

new ObjectMapper().readValue(string, Map.class);

Intern verhält sich Map als JSON-Objekt

Sugan V.
quelle
2
var Data=[{"id": "name2", "label": "Quantity"}]

Übergeben Sie die Zeichenfolgenvariable an Json parse:

Objdata= Json.parse(Data);
Ankita_systematix
quelle
In Ihrem Beispiel Dataist bereits ein Objekt vorhanden, sodass es nicht analysiert werden muss. Sie benötigen einige Anführungszeichen für alle Ihre Daten, um daraus eine Zeichenfolge zu machen.
James Eberhardt
1

Verwenden Sie einfach die evalFunktion.

var myJson = eval(theJsibStr);
Siyavash Hamdi
quelle
eval ist böse, seien Sie sehr vorsichtig mit der Sicherheit mit diesem Ansatz
dparker
0

JSON.parse() Funktion wird reichen.

oder

Mit Jquery,

var obj = jQuery.parseJSON( '{ "name": "Vinod" }' );
alert( obj.name === "Vinod" );
Vinod Selvin
quelle
0

Nehmen wir an, Sie haben einen String wie

Beispiel: "Name: Lucy, Alter: 21, Geschlecht: weiblich"

function getJsonData(query){
    let arrayOfKeyValues = query.split(',');
    let modifiedArray =  new Array();
    console.log(arrayOfKeyValues);
    for(let i=0;i< arrayOfKeyValues.length;i++){
        let arrayValues = arrayOfKeyValues[i].split(':');
        let arrayString ='"'+arrayValues[0]+'"'+':'+'"'+arrayValues[1]+'"';
        modifiedArray.push(arrayString);
    }
    let jsonDataString = '{'+modifiedArray.toString()+'}';
    let jsonData = JSON.parse(jsonDataString);
    console.log(jsonData);
    console.log(typeof jsonData);
    return jsonData;
}

let query = "name:lucy,age:21,gender:female";
let response = getJsonData(query);
console.log(response);

`

Shishir
quelle