Bir dizeyi JSON nesnesine dönüştürme


153

JS'nin bir dizenin JSON olduğunu düşünmesini nasıl sağlıyorsunuz?

Yalnızca JSON nesnesi ona aktarılırsa çalışan bir işlevim var. Ona JSON ile aynı formatta bir dize geçirirsem çalışmıyor. Bu nedenle, bu işlevi kendisine iletilen dizenin bir JSON olduğunu düşünmesini sağlamak istiyorum. Dize gerçekten JSON biçimindedir.

Aşağıdakileri de denedim. String'i Ajax aracılığıyla, "handle as" parametresi "JSON" olarak girdim ve sonucu işleve ilettiğimde çalışıyor.

Bu yüzden sorunun ipte olmadığını anladım. Bu dizeyi JSON'a nasıl dönüştürebilirim? Aynı dizeyi ajax isteği üzerinden alırsam ve sonra onu işleve geçirirsem çalışır, oysa doğrudan iletmek işe yaramaz.

Dize aşağıdaki gibidir:

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

and closing braces..


3
Başlığınız yanıltıcı. Sorunuzun içeriğine bağlı olarak, JSON içeren bir dizeyi JavaScript nesnesine / dizisine dönüştürmek istediğinizi söylemeyi tercih ederim.
Felix Kling

Tamam ben çözdüm. Dizide \ n vardı. Şimdi sadece bununla JSON.parse'ın nasıl kullanılacağını bulmalıyız.
Zer0

Tamam düzelttim. Goto jsonlint.com ve orada dize koydu. Doğru olduğunu söylüyorsa, aynısını elde etmek için JSONParse kullanabilirsiniz.
Zer0

Herhangi birinin bunu okuması durumunda, başlığın "JSON dizesini bir nesneye dönüştürmek" olması gerekiyor
Chris G

Yanıtlar:


360
var obj = JSON.parse(string);

stringJSON dizeniz nerede ?


Bu çalışmıyor. "SyntaxError: JSON.parse: beklenmeyen karakter" hatası veriyor. Aynı dizgeyi bir ajax isteği aracılığıyla alıp "JSON" olarak ele aldığımda olduğu gibi dizede yanlış bir şey yok, sorun çıkmaz.
Zer0

lütfen gerçek JSON dizenizi gönderin
Kshitij

{"data": [{id ": - burada çift tırnak eksik, yani id'nin çift alıntısına başlıyorsunuz
Kshitij

2
Ajax aracılığıyla aldığımda, yanıtı JSON olarak ele alıyor. Ben bir JSON nesnesine bu dönüştürmek olduğunu düşünüyorum Yani ..
Zer0

2
Sonunda jsonlint.com'a gittim ve Json'umun doğru olduğundan emin oldum
Zer0

27

Bunun için kullanabilirsiniz JSON.parse().

MDN'deki belgelere bakın

Misal:

var myObj = JSON.parse('{"p": 5}');
console.log(myObj);

1
Bu çalışmıyor. "SyntaxError: JSON.parse: beklenmeyen karakter" hatası veriyor. Aynı dizgeyi bir ajax isteği aracılığıyla alıp "JSON" olarak ele aldığımda olduğu gibi dizede yanlış bir şey yok, sorun çıkmaz.
Zer0

2
@ Zer0: Sorunuzu json dizginizle birlikte nasıl denediğiniz ile güncellemelisiniz.
Sarfraz

5
@ Zer0: Sadece bilgimiz dahilinde en iyi şekilde cevap verebiliriz. Bir JSON dizeniz olduğunu söylüyorsunuz, buna göre cevap veriyoruz. Görünüşe göre dizeniz farklı, eğer gönderirseniz, bunu dikkate alarak cevaplayabiliriz. Kodlama ile ilgili bir soru sorarsanız, kod / veri vazgeçilmezdir.
Felix Kling

7

Seninki gibi benzer bir dizeyle aynı sorunu yaşadım

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

Buradaki sorun, dizenin yapısıdır. Json ayrıştırıcısı, bu durumda 2 nesne yaratması gerektiğini anlamıyordu. Yaptığım şey biraz aptalca, dizgimi yeniden yapılandırdım ve []bununla ayrıştırıcının tanıdığı

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

Umarım yardımcı olur,

Daha zarif bir yaklaşımı olan varsa lütfen paylaşın.


Yukarıdaki kodunuzda, myStringyanlış inşa ettiniz . Bu bir dize değil ve yanlış biçimlendirilmiş JSON. İkinci satırınız daha sonra gereksiz hale gelir. İşte olması gereken şey: var myString = '[{"id":1,"field1":"someField"},{"id":2,"field1":"someOtherField"}]' Bunun oldukça eski bir gönderi olduğunu biliyorum, ancak birinin bulması durumunda biraz netlik katacağımı düşündüm.
James Eberhardt

Ben kullanarak benim sorunu çözüldü $.parseJSONnerede JSON.parseçalışıyor ve bir hata atma değildiJSON.parse is not a function
brasofilo


4

Nesne Eşleştiricisi kullanarak dizeyi HashMap'e dönüştürün ...

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

Dahili olarak Harita, JSON Nesnesi gibi davranacaktır


3

Sadece evalişlevi kullanın .

var myJson = eval(theJsibStr);

eval kötüdür, bu yaklaşımla güvenliğe çok dikkat edin
dparker

2
var Data=[{"id": "name2", "label": "Quantity"}]

Dize değişkenini Json ayrıştırmasına geçirin:

Objdata= Json.parse(Data);

Örneğinizde Datazaten bir nesne olduğu için onu ayrıştırmaya gerek kalmaz. Bir dize yapmak için tüm Verilerinizi çevreleyen bazı alıntılara ihtiyacınız olacaktır.
James Eberhardt

0

JSON.parse() işlev yapacak.

veya

Jquery kullanarak,

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

0

Hadi gibi bir ipin olduğunu düşünelim

örnek: "ad: lucy, yaş: 21, cinsiyet: kadın"

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

'

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.