Bagaimana mengubah string JSON menjadi array

123

Yang ingin saya lakukan adalah sebagai berikut:

  1. mengambil JSON sebagai masukan dari area teks di php
  2. gunakan input ini dan ubah menjadi JSON dan teruskan ke php curl untuk mengirim permintaan.

ini saya dapatkan di php dari get of api string json ini saya ingin meneruskan ke json tetapi tidak mengubah ke array

echo $str='{
        action : "create",
        record: {
            type: "n$product",
            fields: {
                n$name: "Bread",
                n$price: 2.11
            },
            namespaces: { "my.demo": "n" }
        }
    }';
    $json = json_decode($str, true);

kode di atas tidak mengembalikan saya array.

XMen
sumber
1
Apakah Anda perlu mengonversi string json ke array ATAU Anda ingin memalsukan url dari data itu? Apa sebenarnya pertanyaannya?
Janis Veinbergs
then it is not givingTidak memberi apa? Anda mengambil string berformat JSON dari textarea dan mengubahnya menjadi JSON ???
PeeHaa
1
jika Anda melakukan json di atas dalam pertanyaan saya json_decode (, true) apakah itu mengembalikan array
XMen
@Pekka Silakan periksa pertanyaan saya lagi.
XMen
3
masalah json tidak valid ini.
XMen

Jawaban:

187

Jika Anda meneruskan JSON dalam posting Anda json_decode, itu akan gagal. String JSON yang valid memiliki kunci yang dikutip:

json_decode('{foo:"bar"}');         // this fails
json_decode('{"foo":"bar"}', true); // returns array("foo" => "bar")
json_decode('{"foo":"bar"}');       // returns an object, not an array.
RickN
sumber
jika Anda melakukan json di atas dalam pertanyaan saya json_decode (, true) apakah itu mengembalikan array
XMen
@RahulMehta Jika Anda menggunakan PHP built-in, json_decode()ia akan kembali NULLjika JSON Anda tidak valid (misalnya, tidak ada kunci yang dikutip). Itulah yang dikatakan dalam dokumentasi dan itulah yang dikembalikan oleh instalasi PHP 5.2 saya. Apakah Anda menggunakan fungsi selain resmi, bawaan json_decode()? Apa var_dump(json_decode($str, true));kembali?
RickN
setelah json_encoding, saya ingin membaca setiap objek json misalnya {foo: "bar"} sebagai objek dalam array. bagaimana cara membuat array dari data json_encoded untuk membaca setiap objek json? @RikkusRukkus
Manny265
@ Manny265 itu terdengar seperti sesuatu yang pantas mendapatkan pertanyaannya sendiri dengan (1) beberapa contoh kode, (2) apa yang telah Anda coba sejauh ini dan (3) hasil yang diharapkan, daripada bagian komentar ini.
RickN
96

Coba ini:

$data = json_decode($your_json_string, TRUE);

parameter kedua akan membuat string json yang didekode menjadi array asosiatif.

sepidol
sumber
30

Jika Anda mendapatkan JSON string dari bentuk menggunakan $_REQUEST, $_GETatau $_POSTAnda akan perlu menggunakan fungsi html_entity_decode(). Saya tidak menyadarinya sampai saya melakukan salah satu var_dumpdari apa yang ada dalam permintaan vs. apa yang saya salin ke dalam dan echopernyataan dan melihat string permintaan jauh lebih besar.

Jalan yang benar:

$jsonText = $_REQUEST['myJSON'];
$decodedText = html_entity_decode($jsonText);
$myArray = json_decode($decodedText, true);

Dengan Kesalahan:

$jsonText = $_REQUEST['myJSON'];
$myArray = json_decode($jsonText, true);
echo json_last_error(); //Returns 4 - Syntax error;
jbeauchamp.dll
sumber
2
Sempurna, ini berhasil. ketika saya mendapatkan data dari $ _POST fungsi json_last_error () adalah = ke JSON_ERROR_SYNTAX. tapi semuanya baik-baik saja. Itu adalah kesalahan decode bukan kesalahan encode seperti ascii atau utf8. TERIMA KASIH
11

Gunakan json_decode($json_string, TRUE)fungsi untuk mengonversi objek JSON menjadi larik.

Contoh:

$json_string   = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

$my_array_data = json_decode($json_string, TRUE);

CATATAN: Parameter kedua akan mengubah string JSON yang didekode menjadi array asosiatif.

===========

Keluaran:

var_dump($my_array_data);

array(5) {

    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}
Arslan Ramay
sumber
6

Jika Anda mendapatkan string json dari URL menggunakan file_get_contents, ikuti langkah-langkahnya:

$url = "http://localhost/rest/users";  //The url from where you are getting the contents
$response = (file_get_contents($url)); //Converting in json string
 $n = strpos($response, "[");
$response = substr_replace($response,"",0,$n+1);
$response = substr_replace($response, "" , -1,1);
print_r(json_decode($response,true));
piyush.dll
sumber
6

string Anda harus dalam format berikut:

$str = '{"action": "create","record": {"type": "n$product","fields": {"n$name": "Bread","n$price": 2.11},"namespaces": { "my.demo": "n" }}}';
$array = json_decode($str, true);

echo "<pre>";
print_r($array);

Keluaran:

Array
 (
    [action] => create
    [record] => Array
        (
            [type] => n$product
            [fields] => Array
                (
                    [n$name] => Bread
                    [n$price] => 2.11
                )

            [namespaces] => Array
                (
                    [my.demo] => n
                )

        )

)
Dinanath Thakur
sumber
2

Anda dapat mengubah Objek json menjadi Array & String.

$data='{"resultList":[{"id":"1839","displayName":"Analytics","subLine":""},{"id":"1015","displayName":"Automation","subLine":""},{"id":"1084","displayName":"Aviation","subLine":""},{"id":"554","displayName":"Apparel","subLine":""},{"id":"875","displayName":"Aerospace","subLine":""},{"id":"1990","displayName":"Account Reconciliation","subLine":""},{"id":"3657","displayName":"Android","subLine":""},{"id":"1262","displayName":"Apache","subLine":""},{"id":"1440","displayName":"Acting","subLine":""},{"id":"710","displayName":"Aircraft","subLine":""},{"id":"12187","displayName":"AAC","subLine":""}, {"id":"20365","displayName":"AAT","subLine":""}, {"id":"7849","displayName":"AAP","subLine":""}, {"id":"20511","displayName":"AACR2","subLine":""}, {"id":"28585","displayName":"AASHTO","subLine":""}, {"id":"45191","displayName":"AAMS","subLine":""}]}';

$b=json_decode($data);

$i=0;
while($b->{'resultList'}[$i])
{
    print_r($b->{'resultList'}[$i]->{'displayName'});
    echo "<br />";
    $i++;
}
Manav Akela
sumber
1

Jika Anda perlu mengonversi file atau struktur JSON menjadi array bergaya PHP, dengan semua level bersarang, Anda dapat menggunakan fungsi ini. Pertama, Anda harus json_decode ($ yourJSONdata) dan kemudian meneruskannya ke fungsi ini. Ini akan menampilkan ke jendela browser Anda (atau konsol) array bergaya PHP yang benar.

https://github.com/mobsted/jsontophparray

Denis Volkov
sumber
1
<?php
$str='{
    "action" : "create",
    "record" : {
                "type": "$product",
                "fields": {
                           "name": "Bread",
                           "price": "2.11"
                           },
                "namespaces": { "my.demo": "n" }
                }
    }';
echo $str;
echo "<br>";
$jsonstr = json_decode($str, true);
print_r($jsonstr);

?>

Saya pikir ini harus Bekerja, hanya saja Kunci juga harus dalam tanda kutip ganda jika bukan angka.

Pradeep Dhawan
sumber
1

ini solusi saya: string json $columns_validation = string(1736) "[{"colId":"N_ni","hide":true,"aggFunc":null,"width":136,"pivotIndex":null,"pinned":null,"rowGroupIndex":null},{"colId":"J_2_fait","hide":true,"aggFunc":null,"width":67,"pivotIndex":null,"pinned":null,"rowGroupIndex":null}]"

jadi saya menggunakan json_decode dua kali seperti itu:

$js_column_validation = json_decode($columns_validation);
$js_column_validation = json_decode($js_column_validation); 

var_dump($js_column_validation);

dan hasilnya adalah:

 array(15) { [0]=> object(stdClass)#23 (7) { ["colId"]=> string(4) "N_ni" ["hide"]=> bool(true) ["aggFunc"]=> NULL ["width"]=> int(136) ["pivotIndex"]=> NULL ["pinned"]=> NULL ["rowGroupIndex"]=> NULL } [1]=> object(stdClass)#2130 (7) { ["colId"]=> string(8) "J_2_fait" ["hide"]=> bool(true) ["aggFunc"]=> NULL ["width"]=> int(67) ["pivotIndex"]=> NULL ["pinned"]=> NULL ["rowGroupIndex"]=> NULL }
Mourad MAMASSI
sumber
Terima kasih bro ... Anda menyelamatkan hari saya
Nuwan Withanage
1

Pastikan string dalam format JSON berikut yang seperti ini:

{"result":"success","testid":"1"} (with " ") .

Jika tidak, maka Anda dapat menambahkan "responsetype => json"parameter permintaan Anda.

Kemudian gunakan json_decode($response,true)untuk mengubahnya menjadi array.

unpokkolokko
sumber
1
Selamat datang di StackOverflow :-) Komunitas selalu senang dengan anggota baru yang ingin berkontribusi dan menghargai sikap Anda. Sayangnya anggota lain menganggap jawaban Anda pantas mendapat suara negatif. Bisa jadi, karena pertanyaan itu sendiri ditanyakan sekitar tujuh tahun lalu dan sudah dijawab beberapa kali. Sebagai tambahan, responseTypeproperti digunakan untuk menentukan tipe data dalam jawaban permintaan. Namun masalahnya, isi permintaan berisi data yang tidak benar dari itu sendiri. Oleh karena itu, jawaban Anda tidak sesuai dengan konteks yang diberikan.
Philipp Maurer
1

Anda dapat mengubah string menjadi JSON sebagai berikut dan Anda juga dapat memangkas, menghapus string jika diinginkan,

$str     = '[{"id":1, "value":"Comfort Stretch"}]';
//here is JSON object
$filters = json_decode($str);

foreach($filters as $obj){
   $filter_id[] = $obj->id;
}

//here is your array from that JSON
$filter_id;
Shahrukh Anwar
sumber
0

Gunakan konverter ini, Itu tidak gagal sama sekali: Services_Json

// create a new instance of Services_JSON
$json = new Services_JSON();

// convert a complexe value to JSON notation, and send it to the browser
$value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4)));
$output = $json->encode($value);
print($output);
// prints: ["foo","bar",[1,2,"baz"],[3,[4]]]

// accept incoming POST data, assumed to be in JSON notation
$input = file_get_contents('php://input', 1000000);
$value = $json->decode($input);

// if you want to convert json to php arrays:
$json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
Farhad Sakhaei
sumber
-2
$data = json_encode($result, true);

echo $data;
Viktor
sumber
2
Meskipun kode ini dapat menjawab pertanyaan, memberikan konteks tambahan mengenai mengapa dan / atau bagaimana kode ini menjawab pertanyaan tersebut meningkatkan nilai jangka panjangnya.
rollstuhlfahrer