Mengubah string menjadi objek JSON


149

Bagaimana Anda membuat JS berpikir bahwa string adalah JSON?

Saya memiliki fungsi yang hanya berfungsi jika objek JSON dilewatkan ke sana. Jika saya meneruskan string ke sana, dengan format yang sama dengan JSON, itu tidak berfungsi. Jadi saya ingin membuat fungsi itu berpikir bahwa string yang diteruskan ke itu adalah JSON. String tersebut memang dalam format JSON.

Saya juga mencoba yang berikut ini. Saya memasukkan string melalui Ajax, dengan parameter "handle as" sebagai "JSON", dan kemudian ketika saya meneruskan hasilnya ke fungsi kerjanya.

Jadi saya menyimpulkan masalahnya bukan pada string. Bagaimana cara mengonversi string ini ke JSON? Jika saya mendapatkan string yang sama melalui permintaan ajax dan kemudian meneruskannya ke berfungsi berfungsi, sedangkan secara langsung melewati itu tidak berfungsi.

String adalah sebagai berikut:

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

and closing braces..

1
kemungkinan duplikat dengan aman mengubah string JSON menjadi objek
Pastori

2
Judul Anda menyesatkan. Berdasarkan konten pertanyaan Anda, saya lebih suka mengatakan Anda ingin mengubah string yang berisi JSON menjadi objek / array JavaScript.
Felix Kling

OK saya menyelesaikannya. Ada \ n di string. Sekarang hanya perlu mencari cara untuk menggunakan JSON.parse dengan ini.
Zer0

Ok saya memperbaikinya. Goto jsonlint.com dan letakkan tali Anda di sana. Jika dikatakan benar, maka Anda dapat menggunakan JSONParse untuk mencapai hal yang sama.
Zer0

Jika ada yang membaca ini, judulnya seharusnya "mengubah string JSON menjadi objek"
Chris G

Jawaban:


354
var obj = JSON.parse(string);

Di mana stringstring json Anda.


Ini tidak bekerja. Itu melempar kesalahan "SyntaxError: JSON.parse: karakter yang tidak terduga". Tidak ada yang salah dengan string seperti ketika saya mendapatkan string yang sama melalui permintaan ajax dan menanganinya sebagai "JSON", tidak ada masalah terjadi.
Zer0

silakan kirim string JSON acutal Anda
Kshitij

{"data": [{id ": - Anda kehilangan tanda kutip ganda di sini, yaitu memulai tanda kutip ganda dari id
Kshitij

2
Ketika saya mendapatkannya melalui Ajax berfungsi saat itu menangani respons sebagai JSON. Jadi saya pikir saya harus mengubah ini menjadi objek JSON ..
Zer0

2
Saya akhirnya pergi ke jsonlint.com, dan memastikan Json saya benar
Zer0

26

Anda dapat menggunakan JSON.parse()untuk itu.

Lihat dokumen di MDN

Contoh:

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

1
Ini tidak bekerja. Itu melempar kesalahan "SyntaxError: JSON.parse: karakter yang tidak terduga". Tidak ada yang salah dengan string seperti ketika saya mendapatkan string yang sama melalui permintaan ajax dan menanganinya sebagai "JSON", tidak ada masalah terjadi.
Zer0

2
@ Zer0: Anda harus memperbarui pertanyaan Anda dengan cara Anda mencobanya bersama dengan string json Anda.
Sarfraz

4
@ Zer0: Kami hanya bisa menjawab yang terbaik dari pengetahuan kami. Anda mengatakan Anda memiliki string JSON, kami menjawabnya. Tampaknya string Anda berbeda, jika Anda mempostingnya, kami dapat menjawab dengan mempertimbangkan hal ini. Jika Anda bertanya tentang pengkodean, maka kode / data sangat diperlukan.
Felix Kling

7

Saya memiliki masalah yang sama dengan string yang sama seperti milik Anda

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

Masalahnya di sini adalah struktur string. Pengurai json tidak mengakui bahwa ia perlu membuat 2 objek dalam kasus ini. Jadi apa yang saya lakukan agak konyol, saya hanya menyusun ulang string saya dan menambahkan []dengan ini parser diakui

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

Semoga ini bisa membantu,

Jika ada yang memiliki pendekatan yang lebih elegan, silakan bagikan.


Dalam kode Anda di atas, Anda membuat konstruksi yang myStringsalah. Ini bukan string, dan JSON diformat salah. Baris kedua Anda akan menjadi berlebihan. Inilah yang seharusnya: var myString = '[{"id":1,"field1":"someField"},{"id":2,"field1":"someOtherField"}]' Saya tahu ini posting yang cukup lama, tapi saya pikir saya akan menambahkan beberapa kejelasan kalau-kalau ada yang menemukannya.
James Eberhardt

Saya memecahkan masalah saya menggunakan di $.parseJSONmana JSON.parsetidak berfungsi dan melempar kesalahanJSON.parse is not a function
brasofilo


3

konversikan string ke HashMap menggunakan Object Mapper ...

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

Peta internal akan berperilaku sebagai Objek JSON


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

Masukkan variabel string ke parse Json:

Objdata= Json.parse(Data);

Dalam contoh Anda, Datasudah merupakan objek, jadi tidak perlu menguraikannya. Anda membutuhkan beberapa kutipan yang mengelilingi semua Data Anda untuk membuatnya menjadi string.
James Eberhardt

2

Cukup gunakan evalfungsi.

var myJson = eval(theJsibStr);

eval itu jahat, berhati-hatilah terhadap keamanan dengan pendekatan ini
dparker

0

JSON.parse() fungsi akan dilakukan.

atau

Menggunakan Jquery,

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

0

Mari kita anggap Anda memiliki string

contoh: "nama: lucy, usia: 21, jenis kelamin: perempuan"

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

`

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.