Cách chuyển đổi chuỗi JSON thành mảng


123

Những gì tôi muốn làm là:

  1. lấy JSON làm đầu vào từ vùng văn bản trong php
  2. sử dụng đầu vào này và chuyển đổi nó thành JSON và chuyển nó đến php curl để gửi yêu cầu.

m này nhận được tại php từ get of api chuỗi json này tôi muốn chuyển sang json nhưng nó không chuyển đổi thành mảng

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

mã trên không trả về mảng cho tôi.


1
Bạn có cần chuyển đổi chuỗi json thành mảng HOẶC bạn có muốn tạo url từ dữ liệu đó không? Câu hỏi chính xác là gì?
Janis Veinbergs

then it is not givingKhông cho cái gì? Bạn lấy một chuỗi có định dạng JSON từ textarea và bạn chuyển đổi nó thành JSON ???
PeeHaa

1
nếu bạn làm như json trên trong json_decode câu hỏi của tôi (, true) nó retuns một mảng
XMen

@Pekka Vui lòng kiểm tra lại quesiton của tôi.
XMen

3
vấn đề json không hợp lệ đây là.
XMen

Câu trả lời:


187

Nếu bạn chuyển JSON trong bài đăng của mình tới json_decode, nó sẽ không thành công. Các chuỗi JSON hợp lệ có các khóa được trích dẫn:

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.

nếu bạn làm như json trên trong json_decode câu hỏi của tôi (, true) nó retuns một mảng
XMen

@RahulMehta Nếu bạn đang sử dụng PHP tích hợp sẵn, json_decode()nó sẽ trả về NULLnếu JSON của bạn không hợp lệ (ví dụ: không có khóa được trích dẫn). Đó là những gì tài liệu nói và đó là những gì cài đặt PHP 5.2 của tôi trả về. Bạn có đang sử dụng một chức năng khác với chức năng chính thức, được tích hợp sẵn json_decode()không? Cái gì var_dump(json_decode($str, true));trả lại?
RickN

sau khi json_encoding, tôi muốn đọc từng đối tượng json riêng lẻ, ví dụ {foo: "bar"} như một đối tượng trong mảng. làm cách nào để tạo một mảng từ dữ liệu json_encoded để đọc từng đối tượng json? @RikkusRukkus
Manny265

@ Manny265 nghe có vẻ như một điều gì đó xứng đáng với câu hỏi của riêng nó với (1) một số mã mẫu, (2) những gì bạn đã thử cho đến nay và (3) kết quả mong đợi, hơn là phần bình luận này.
RickN

96

Thử cái này:

$data = json_decode($your_json_string, TRUE);

tham số thứ hai sẽ biến chuỗi json được giải mã thành một mảng kết hợp.


30

Nếu bạn đang nhận được chuỗi JSON từ các hình thức sử dụng $_REQUEST, $_GEThoặc $_POSTbạn sẽ cần phải sử dụng các chức năng html_entity_decode(). Tôi đã không nhận ra điều này cho đến khi tôi thực hiện một var_dumptrong những gì trong yêu cầu so với những gì tôi đã sao chép vào và echocâu lệnh và nhận thấy chuỗi yêu cầu lớn hơn nhiều.

Cách đúng:

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

Có lỗi:

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

2
Hoàn hảo, điều này hoạt động. khi tôi lấy dữ liệu từ $ _POST hàm json_last_error () was = to JSON_ERROR_SYNTAX. nhưng tất cả mọi thứ đều ổn. Đó là lỗi giải mã không phải lỗi mã hóa như ascii hoặc utf8. THANKS

11

Sử dụng json_decode($json_string, TRUE)hàm để chuyển đổi đối tượng JSON thành một mảng.

Thí dụ:

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

$my_array_data = json_decode($json_string, TRUE);

LƯU Ý: Tham số thứ hai sẽ chuyển đổi chuỗi JSON đã giải mã thành một mảng kết hợp.

===========

Đầu ra:

var_dump($my_array_data);

array(5) {

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

6

Nếu bạn đang nhận được chuỗi json từ URL bằng cách sử dụng file_get_contents, hãy làm theo các bước:

$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

chuỗi của bạn phải ở định dạng sau:

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

Đầu ra:

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

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

        )

)

2

Bạn có thể chuyển đổi json Object thành 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

Nếu bạn cần chuyển đổi tệp hoặc cấu trúc JSON sang mảng kiểu PHP, với tất cả các cấp lồng nhau, bạn có thể sử dụng hàm này. Đầu tiên, bạn phải json_decode ($ yourJSONdata) và sau đó chuyển nó vào hàm này. Nó sẽ xuất ra cửa sổ trình duyệt (hoặc bảng điều khiển) của bạn các mảng đúng kiểu 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);

?>

tôi nghĩ rằng điều này sẽ hoạt động, chỉ là các phím cũng phải ở trong dấu ngoặc kép nếu chúng không phải là chữ số.


1

đây là giải pháp của tôi: chuỗi 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}]"

vì vậy tôi sử dụng json_decode hai lần như vậy:

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

var_dump($js_column_validation);

và kết quả là:

 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 }

Cảm ơn người anh em ... bạn đã cứu một ngày của tôi
Nuwan Withanage 11/11/19

1

Đảm bảo rằng chuỗi có định dạng JSON sau đây giống như sau:

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

Nếu không, bạn có thể thêm thông số "responsetype => json"yêu cầu của mình.

Sau đó, sử dụng json_decode($response,true)để chuyển đổi nó thành một mảng.


1
Chào mừng bạn đến với StackOverflow :-) Cộng đồng luôn vui mừng vì những thành viên mới muốn đóng góp cho nó và đánh giá cao thái độ của bạn. Đáng buồn thay, một thành viên khác cho rằng câu trả lời của bạn xứng đáng nhận được một phiếu tán thành. Điều này có thể xảy ra, bởi vì bản thân câu hỏi đã được hỏi khoảng bảy năm trước và đã được trả lời nhiều lần. Ngoài ra, thuộc responseTypetính được sử dụng để xác định loại dữ liệu trong câu trả lời cho yêu cầu. Tuy nhiên, vấn đề là, phần thân yêu cầu chứa dữ liệu không có trong bản thân từ chính xác. Do đó, câu trả lời của bạn không phù hợp với ngữ cảnh nhất định.
Philipp Maurer

1

Bạn có thể thay đổi một chuỗi thành JSON như sau và bạn cũng có thể cắt, tách trên chuỗi nếu muốn,

$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

Sử dụng trình chuyển đổi này, nó không thất bại chút nào: 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
Mặc dù mã này có thể trả lời câu hỏi, nhưng việc cung cấp thêm ngữ cảnh liên quan đến lý do và / hoặc cách mã này trả lời câu hỏi sẽ cải thiện giá trị lâu dài của nó.
rollstuhlfahrer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.