วิธีแปลงสตริง JSON เป็นอาร์เรย์


123

สิ่งที่ฉันต้องการทำมีดังต่อไปนี้:

  1. รับ JSON เป็นอินพุตจากพื้นที่ข้อความใน php
  2. ใช้อินพุตนี้และแปลงเป็น JSON และส่งต่อไปยัง php curl เพื่อส่งคำขอ

m นี้รับที่ php จาก get ของ api สตริง json นี้ฉันต้องการส่งผ่านไปยัง json แต่ไม่ได้แปลงเป็นอาร์เรย์

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

โค้ดด้านบนไม่ส่งคืนอาร์เรย์ให้ฉัน


1
คุณต้องแปลงสตริง json เป็นอาร์เรย์หรือคุณต้องการปลอม url จากข้อมูลนั้นหรือไม่? คำถามคืออะไรกันแน่?
Janis Veinbergs

then it is not givingไม่ให้อะไร? คุณใช้สตริงที่จัดรูปแบบ JSON จาก textarea และคุณแปลงเป็น JSON ???
PeeHaa

1
ถ้าคุณทำ json ข้างต้นในคำถามของฉัน json_decode (จริง) มันจะเรียกใช้อาร์เรย์ใหม่หรือไม่
XMen

@Pekka โปรดตรวจสอบคำถามของฉันอีกครั้ง
XMen

3
ปัญหา json ไม่ถูกต้องนี่คือ
XMen

คำตอบ:


187

หากคุณส่ง JSON ในโพสต์ไปที่json_decodeมันจะล้มเหลว สตริง JSON ที่ถูกต้องมีการอ้างอิงคีย์:

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.

ถ้าคุณทำ json ข้างต้นในคำถามของฉัน json_decode (จริง) มันจะเรียกใช้อาร์เรย์ใหม่หรือไม่
XMen

@RahulMehta หากคุณใช้ PHP ในตัวjson_decode()มันจะกลับมาNULLหาก JSON ของคุณไม่ถูกต้อง (เช่นไม่มีคีย์ที่ยกมา) นั่นคือสิ่งที่เอกสารระบุไว้และนั่นคือสิ่งที่การติดตั้ง PHP 5.2 ของฉันส่งคืน คุณใช้ฟังก์ชันอื่นที่ไม่ใช่ทางการในตัวjson_decode()หรือไม่? อะไรvar_dump(json_decode($str, true));กลับมา?
RickN

หลังจาก json_encoding ฉันต้องการอ่านแต่ละวัตถุ json เช่น {foo: "bar"} เป็นวัตถุในอาร์เรย์ ฉันจะสร้างอาร์เรย์จากข้อมูล json_encoded เพื่ออ่านวัตถุ json แต่ละตัวได้อย่างไร @RikkusRukkus
Manny265

@ Manny265 ที่ดูเหมือนจะเป็นสิ่งที่สมควรได้รับคำถามของตัวเองด้วย (1) โค้ดตัวอย่าง (2) สิ่งที่คุณได้ลองทำจนถึงตอนนี้และ (3) ผลลัพธ์ที่คาดหวังแทนที่จะเป็นส่วนความคิดเห็นนี้
RickN

96

ลองสิ่งนี้:

$data = json_decode($your_json_string, TRUE);

พารามิเตอร์ที่สองจะทำให้สตริง json ที่ถอดรหัสเป็นอาร์เรย์ที่เชื่อมโยงกัน


30

หากคุณได้รับสตริง JSON จากรูปแบบการใช้$_REQUEST, $_GETหรือที่คุณจะต้องใช้ฟังก์ชั่น$_POST html_entity_decode()ฉันไม่ได้ตระหนักถึงสิ่งนี้จนกว่าฉันจะทำvar_dumpสิ่งที่อยู่ในคำขอเทียบกับสิ่งที่ฉันคัดลอกและechoคำสั่งและสังเกตว่าสตริงคำขอมีขนาดใหญ่กว่ามาก

วิธีที่ถูกต้อง:

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

ด้วยข้อผิดพลาด:

$jsonText = $_REQUEST['myJSON'];
$myArray = json_decode($jsonText, true);
echo json_last_error(); //Returns 4 - Syntax error;

2
สมบูรณ์แบบนี้ใช้งานได้ เมื่อฉันได้รับข้อมูลจากฟังก์ชัน $ _POST json_last_error () คือ = ถึง JSON_ERROR_SYNTAX แต่ทุกอย่างเรียบร้อยดี มันเป็นข้อผิดพลาดของการถอดรหัสไม่ใช่ข้อผิดพลาดของการเข้ารหัสเช่น ascii หรือ utf8 ขอบคุณ

11

ใช้json_decode($json_string, TRUE)ฟังก์ชันเพื่อแปลงออบเจ็กต์ JSON เป็นอาร์เรย์

ตัวอย่าง:

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

$my_array_data = json_decode($json_string, TRUE);

หมายเหตุ: พารามิเตอร์ที่สองจะแปลงสตริง JSON ที่ถอดรหัสเป็นอาร์เรย์ที่เชื่อมโยงกัน

===========

เอาท์พุท:

var_dump($my_array_data);

array(5) {

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

6

หากคุณได้รับสตริง json จาก URL โดยใช้file_get_contentsให้ทำตามขั้นตอน:

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

6

สตริงของคุณควรอยู่ในรูปแบบต่อไปนี้:

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

เอาท์พุท:

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

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

        )

)

2

คุณสามารถแปลง json Object เป็น 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++;
}

1

หากคุณต้องการแปลงไฟล์ JSON หรือโครงสร้างเป็นอาร์เรย์สไตล์ PHP ด้วยระดับการซ้อนทั้งหมดคุณสามารถใช้ฟังก์ชันนี้ได้ ขั้นแรกคุณต้อง json_decode ($ yourJSONdata) จากนั้นส่งต่อไปยังฟังก์ชันนี้ มันจะส่งออกไปยังหน้าต่างเบราว์เซอร์ของคุณ (หรือคอนโซล) อาร์เรย์สไตล์ PHP ที่ถูกต้อง

https://github.com/mobsted/jsontophparray


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

?>

ฉันคิดว่าสิ่งนี้ควรใช้งานได้เพียงแค่คีย์ควรอยู่ในเครื่องหมายอัญประกาศคู่หากไม่ใช่ตัวเลข


1

นี่คือทางออกของฉัน: สตริง 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}]"

ดังนั้นฉันจึงใช้ json_decode สองครั้งเช่นนั้น:

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

var_dump($js_column_validation);

และผลลัพธ์คือ:

 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 }

Thankz bro ... you save my day
Nuwan Withanage

1

ตรวจสอบให้แน่ใจว่าสตริงอยู่ในรูปแบบ JSON ต่อไปนี้ซึ่งเป็นดังนี้:

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

หากไม่เป็นเช่นนั้นคุณสามารถเพิ่ม"responsetype => json"พารามิเตอร์คำขอของคุณได้

จากนั้นใช้json_decode($response,true)แปลงเป็นอาร์เรย์


1
ยินดีต้อนรับสู่ StackOverflow :-) ชุมชนมีความสุขเสมอสำหรับสมาชิกใหม่ที่ต้องการมีส่วนร่วมและชื่นชมทัศนคติของคุณ น่าเศร้าที่สมาชิกคนอื่นคิดว่าคำตอบของคุณสมควรได้รับการโหวตลดลง อาจเป็นเพราะคำถามนั้นถูกถามเมื่อเจ็ดปีที่แล้วและได้รับคำตอบหลายครั้งแล้ว นอกจากนี้responseTypeคุณสมบัติยังถูกใช้เพื่อกำหนดประเภทของข้อมูลในคำตอบของคำขอ แต่ปัญหาคือเนื้อหาคำขอมีข้อมูลที่ไม่ถูกต้องจากตัวเอง คำตอบของคุณจึงไม่ตรงกับบริบทที่กำหนด
Philipp Maurer

1

คุณสามารถเปลี่ยนสตริงเป็น JSON ได้ดังนี้และคุณยังสามารถตัดแต่งแถบสตริงได้หากต้องการ

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

0

ใช้ตัวแปลงนี้ไม่ล้มเหลวเลย: 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);

-2
$data = json_encode($result, true);

echo $data;

2
แม้ว่ารหัสนี้อาจตอบคำถาม แต่การให้บริบทเพิ่มเติมเกี่ยวกับสาเหตุและ / หรือวิธีที่รหัสนี้ตอบคำถามช่วยเพิ่มมูลค่าในระยะยาว
rollstuhlfahrer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.