Hướng dẫn convert json file to php array - chuyển đổi tệp json thành mảng php

Tôi đã cố gắng phân tích một tệp JSON bằng PHP. Nhưng bây giờ tôi đang bị mắc kẹt.

Đây là nội dung của tệp JSON của tôi:

{ "John": { "status":"Wait" }, "Jennifer": { "status":"Active" }, "James": { "status":"Active", "age":56, "count":10, "progress":0.0029857, "bad":0 } }

Và đây là những gì tôi đã thử cho đến nay:

<?php $string = file_get_contents("/home/michael/test.json"); $json_a = json_decode($string, true); echo $json_a['John'][status]; echo $json_a['Jennifer'][status];

Nhưng bởi vì tôi không biết tên (như $jsonIterator = new RecursiveIteratorIterator( new RecursiveArrayIterator(json_decode($json, TRUE)), RecursiveIteratorIterator::SELF_FIRST); foreach ($jsonIterator as $key => $val) { if(is_array($val)) { echo "$key:\n"; } else { echo "$key => $val\n"; } } 5, $jsonIterator = new RecursiveIteratorIterator( new RecursiveArrayIterator(json_decode($json, TRUE)), RecursiveIteratorIterator::SELF_FIRST); foreach ($jsonIterator as $key => $val) { if(is_array($val)) { echo "$key:\n"; } else { echo "$key => $val\n"; } } 6) và tất cả các khóa và giá trị có sẵn (như $jsonIterator = new RecursiveIteratorIterator( new RecursiveArrayIterator(json_decode($json, TRUE)), RecursiveIteratorIterator::SELF_FIRST); foreach ($jsonIterator as $key => $val) { if(is_array($val)) { echo "$key:\n"; } else { echo "$key => $val\n"; } } 7, $jsonIterator = new RecursiveIteratorIterator( new RecursiveArrayIterator(json_decode($json, TRUE)), RecursiveIteratorIterator::SELF_FIRST); foreach ($jsonIterator as $key => $val) { if(is_array($val)) { echo "$key:\n"; } else { echo "$key => $val\n"; } } 8) trước đó, tôi nghĩ rằng tôi cần tạo một số vòng lặp foreach.

Tôi sẽ đánh giá cao một ví dụ cho điều này.

np_6

5141 Huy hiệu vàng6 Huy hiệu bạc19 Huy hiệu đồng1 gold badge6 silver badges19 bronze badges

Đã hỏi ngày 3 tháng 12 năm 2010 lúc 8:11Dec 3, 2010 at 8:11

11

Để lặp lại trên một mảng đa chiều, bạn có thể sử dụng RechiveArrayIterator

$jsonIterator = new RecursiveIteratorIterator( new RecursiveArrayIterator(json_decode($json, TRUE)), RecursiveIteratorIterator::SELF_FIRST); foreach ($jsonIterator as $key => $val) { if(is_array($val)) { echo "$key:\n"; } else { echo "$key => $val\n"; } }

Output:

John: status => Wait Jennifer: status => Active James: status => Active age => 56 count => 10 progress => 0.0029857 bad => 0

Chạy trên Codepad

xpy

5.3333 Huy hiệu vàng31 Huy hiệu bạc48 Huy hiệu đồng3 gold badges31 silver badges48 bronze badges

Đã trả lời ngày 3 tháng 12 năm 2010 lúc 8:27Dec 3, 2010 at 8:27

GordongordonGordon

308K72 Huy hiệu vàng528 Huy hiệu bạc553 Huy hiệu Đồng72 gold badges528 silver badges553 bronze badges

7

Tôi không thể tin rằng rất nhiều người đang đăng câu trả lời mà không đọc JSON đúng cách.

Nếu bạn tìm kiếm một mình $jsonIterator = new RecursiveIteratorIterator( new RecursiveArrayIterator(json_decode($json, TRUE)), RecursiveIteratorIterator::SELF_FIRST); foreach ($jsonIterator as $key => $val) { if(is_array($val)) { echo "$key:\n"; } else { echo "$key => $val\n"; } } 9, bạn có một đối tượng của các đối tượng. Ngay cả khi bạn vượt qua trong John: status => Wait Jennifer: status => Active James: status => Active age => 56 count => 10 progress => 0.0029857 bad => 0 0 làm tham số thứ hai, bạn có một mảng hai chiều. Nếu bạn đang lặp qua chiều thứ nhất, bạn không thể chỉ lặp lại chiều thứ hai như thế. Vì vậy, điều này là sai:

foreach ($json_a as $k => $v) { echo $k, ' : ', $v; }

Để lặp lại trạng thái của mỗi người, hãy thử điều này:

<?php $string = file_get_contents("/home/michael/test.json"); if ($string === false) { // deal with error... } $json_a = json_decode($string, true); if ($json_a === null) { // deal with error... } foreach ($json_a as $person_name => $person_a) { echo $person_a['status']; } ?>

Flim

Huy hiệu vàng 124K4040 gold badges237 silver badges252 bronze badges

Đã trả lời ngày 3 tháng 12 năm 2010 lúc 8:22Dec 3, 2010 at 8:22

BoltclockboltclockBoltClock

679K156 Huy hiệu vàng1366 Huy hiệu bạc1339 Huy hiệu Đồng156 gold badges1366 silver badges1339 bronze badges

4

Giải pháp thanh lịch nhất:

$shipments = json_decode(file_get_contents("shipments.js"), true); print_r($shipments);

Hãy nhớ rằng tệp JSON phải được mã hóa trong UTF-8 mà không cần BOM. Nếu tệp có BOM, thì JSON_DECODE sẽ trả về NULL.

Alternatively:

$shipments = json_encode(json_decode(file_get_contents("shipments.js"), true)); echo $shipments;

Đã trả lời ngày 17 tháng 12 năm 2014 lúc 13:30Dec 17, 2014 at 13:30

Swiftswiftswift

1.1087 huy hiệu bạc9 Huy hiệu đồng7 silver badges9 bronze badges

4

Thử

<?php $string = file_get_contents("/home/michael/test.json"); $json_a = json_decode($string,true); foreach ($json_a as $key => $value){ echo $key . ':' . $value; } ?>

Đã trả lời ngày 3 tháng 12 năm 2010 lúc 8:17Dec 3, 2010 at 8:17

ThariamathariamaThariama

49.4K11 Huy hiệu vàng136 Huy hiệu bạc161 Huy hiệu đồng11 gold badges136 silver badges161 bronze badges

3

Tôi hoàn toàn vượt xa tôi rằng không ai chỉ ra rằng "thẻ" bắt đầu của bạn là sai. Bạn đang tạo một đối tượng với {}, trong khi bạn có thể tạo một mảng với [].

[ // <-- Note that I changed this { "name" : "john", // And moved the name here. "status":"Wait" }, { "name" : "Jennifer", "status":"Active" }, { "name" : "James", "status":"Active", "age":56, "count":10, "progress":0.0029857, "bad":0 } ] // <-- And this.

Với sự thay đổi này, JSON sẽ được phân tích cú pháp như một mảng thay vì một đối tượng. Và với mảng đó, bạn có thể làm bất cứ điều gì bạn muốn, như các vòng lặp, v.v.

Đã trả lời ngày 21 tháng 2 năm 2015 lúc 12:52Feb 21, 2015 at 12:52

DaviddavidDavid

1.16910 Huy hiệu bạc23 Huy hiệu Đồng10 silver badges23 bronze badges

5

Thử cái này

<?php $string = file_get_contents("/home/michael/test.json"); $json_a = json_decode($string, true); echo $json_a['John'][status]; echo $json_a['Jennifer'][status]; 0

Dane Brouwer

2.6431 Huy hiệu vàng21 Huy hiệu bạc28 Huy hiệu đồng1 gold badge21 silver badges28 bronze badges

Đã trả lời ngày 5 tháng 10 năm 2016 lúc 22:00Oct 5, 2016 at 22:00

Vivekvivekvivek

3542 Huy hiệu bạc9 Huy hiệu Đồng2 silver badges9 bronze badges

2

Try:

<?php $string = file_get_contents("/home/michael/test.json"); $json_a = json_decode($string, true); echo $json_a['John'][status]; echo $json_a['Jennifer'][status]; 1

Đã trả lời ngày 11 tháng 6 năm 2014 lúc 6:06Jun 11, 2014 at 6:06

1

Câu trả lời tiêu chuẩn hơn:

<?php $string = file_get_contents("/home/michael/test.json"); $json_a = json_decode($string, true); echo $json_a['John'][status]; echo $json_a['Jennifer'][status]; 2

Và đầu ra là:

<?php $string = file_get_contents("/home/michael/test.json"); $json_a = json_decode($string, true); echo $json_a['John'][status]; echo $json_a['Jennifer'][status]; 3

Đã trả lời ngày 3 tháng 8 năm 2016 lúc 7:53Aug 3, 2016 at 7:53

3

Vòng lặp qua JSON với vòng lặp John: status => Wait Jennifer: status => Active James: status => Active age => 56 count => 10 progress => 0.0029857 bad => 0 1 làm cặp giá trị khóa. Làm kiểm tra loại để xác định xem cần nhiều vòng lặp hơn.

<?php $string = file_get_contents("/home/michael/test.json"); $json_a = json_decode($string, true); echo $json_a['John'][status]; echo $json_a['Jennifer'][status]; 4

Đã trả lời ngày 3 tháng 12 năm 2010 lúc 8:19Dec 3, 2010 at 8:19

AlexalexAlex

62.5K46 Huy hiệu vàng151 Huy hiệu bạc179 Huy hiệu đồng46 gold badges151 silver badges179 bronze badges

1

<?php $string = file_get_contents("/home/michael/test.json"); $json_a = json_decode($string, true); echo $json_a['John'][status]; echo $json_a['Jennifer'][status]; 5

Đã trả lời ngày 3 tháng 4 năm 2018 lúc 10:10Apr 3, 2018 at 10:10

2

Thử nó:

<?php $string = file_get_contents("/home/michael/test.json"); $json_a = json_decode($string, true); echo $json_a['John'][status]; echo $json_a['Jennifer'][status]; 6

Đã trả lời ngày 31 tháng 5 năm 2013 lúc 11:56May 31, 2013 at 11:56

1

Khi bạn giải mã một chuỗi JSON, bạn sẽ nhận được một đối tượng. không phải là một mảng. Vì vậy, cách tốt nhất để xem cấu trúc bạn đang nhận được, là tạo ra một var_dump của giải mã. (VAR_DUMP này có thể giúp bạn hiểu cấu trúc, chủ yếu trong các trường hợp phức tạp).

<?php $string = file_get_contents("/home/michael/test.json"); $json_a = json_decode($string, true); echo $json_a['John'][status]; echo $json_a['Jennifer'][status]; 7

Đã trả lời ngày 25 tháng 8 năm 2014 lúc 1:08Aug 25, 2014 at 1:08

<?php $string = file_get_contents("/home/michael/test.json"); $json_a = json_decode($string, true); echo $json_a['John'][status]; echo $json_a['Jennifer'][status]; 8

Đã trả lời ngày 19 tháng 11 năm 2014 lúc 4:59Nov 19, 2014 at 4:59

1

Cách nhanh nhất để lặp lại tất cả các giá trị JSON là sử dụng vòng lặp trong vòng lặp, vòng lặp đầu tiên sẽ có được tất cả các đối tượng và thứ hai là giá trị ...

<?php $string = file_get_contents("/home/michael/test.json"); $json_a = json_decode($string, true); echo $json_a['John'][status]; echo $json_a['Jennifer'][status]; 9

Đã trả lời ngày 29 tháng 7 năm 2016 lúc 9:18Jul 29, 2016 at 9:18

Bạn phải cho như thế này:

$jsonIterator = new RecursiveIteratorIterator( new RecursiveArrayIterator(json_decode($json, TRUE)), RecursiveIteratorIterator::SELF_FIRST); foreach ($jsonIterator as $key => $val) { if(is_array($val)) { echo "$key:\n"; } else { echo "$key => $val\n"; } } 0

Trong đó cho kết quả:

$jsonIterator = new RecursiveIteratorIterator( new RecursiveArrayIterator(json_decode($json, TRUE)), RecursiveIteratorIterator::SELF_FIRST); foreach ($jsonIterator as $key => $val) { if(is_array($val)) { echo "$key:\n"; } else { echo "$key => $val\n"; } } 1

Elmo

6.20915 Huy hiệu vàng70 Huy hiệu bạc139 Huy hiệu đồng15 gold badges70 silver badges139 bronze badges

Đã trả lời ngày 26 tháng 1 năm 2012 lúc 16:29Jan 26, 2012 at 16:29

2

Tôi đang sử dụng mã dưới đây để chuyển đổi JSON thành mảng trong John: status => Wait Jennifer: status => Active James: status => Active age => 56 count => 10 progress => 0.0029857 bad => 0 2, nếu JSON có giá trị thì John: status => Wait Jennifer: status => Active James: status => Active age => 56 count => 10 progress => 0.0029857 bad => 0 3 hoạt động tốt và sẽ trả về một mảng, nhưng trong trường hợp JSON bị dị tật, nó sẽ trả về John: status => Wait Jennifer: status => Active James: status => Active age => 56 count => 10 progress => 0.0029857 bad => 0 4,

$jsonIterator = new RecursiveIteratorIterator( new RecursiveArrayIterator(json_decode($json, TRUE)), RecursiveIteratorIterator::SELF_FIRST); foreach ($jsonIterator as $key => $val) { if(is_array($val)) { echo "$key:\n"; } else { echo "$key => $val\n"; } } 2

Nếu trong trường hợp JSON bị dị tật, bạn chỉ mong đợi mảng, thì bạn có thể sử dụng chức năng này,

$jsonIterator = new RecursiveIteratorIterator( new RecursiveArrayIterator(json_decode($json, TRUE)), RecursiveIteratorIterator::SELF_FIRST); foreach ($jsonIterator as $key => $val) { if(is_array($val)) { echo "$key:\n"; } else { echo "$key => $val\n"; } } 3

Nếu trong trường hợp JSON bị dị tật, bạn muốn dừng thực thi mã, thì bạn có thể sử dụng chức năng này,

$jsonIterator = new RecursiveIteratorIterator( new RecursiveArrayIterator(json_decode($json, TRUE)), RecursiveIteratorIterator::SELF_FIRST); foreach ($jsonIterator as $key => $val) { if(is_array($val)) { echo "$key:\n"; } else { echo "$key => $val\n"; } } 4

Đã trả lời ngày 12 tháng 3 năm 2019 lúc 11:47Mar 12, 2019 at 11:47

Harish Sharmaharish SharmaHarisH Sharma

1.0431 Huy hiệu vàng11 Huy hiệu bạc36 Huy hiệu đồng1 gold badge11 silver badges36 bronze badges

4

Chủ đề