Hướng dẫn php read and write json file - php đọc và ghi tệp json

Tôi có JSON sau trong một tệp

 $first, "last" => $last);

file_put_contents($file, json_encode($json));

?>
7:

{
"bgates":{"first":"Bill","last":"Gates"},
"sjobs":{"first":"Steve","last":"Jobs"}
}

Làm cách nào để thêm

 $first, "last" => $last);

file_put_contents($file, json_encode($json));

?>
8 vào tệp của tôi bằng PHP?

Đây là những gì tôi có cho đến nay:

 $first, "last" => $last);

file_put_contents($file, json_encode($json));

?>

Điều này cho tôi một lỗi nghiêm trọng: Không thể sử dụng đối tượng của loại stdclass làm mảng trên dòng này:

$json[$user] = array("first" => $first, "last" => $last);

Tôi đang sử dụng PHP5.2. Bất kỳ suy nghĩ? Cảm ơn!

JSON (ký hiệu đối tượng JavaScript) là một định dạng tệp tiêu chuẩn để trao đổi dữ liệu giữa các ứng dụng.

Trong hướng dẫn này, chúng tôi sẽ học cách thực hiện thao tác phổ biến nhất, chẳng hạn như mã hóa, giải mã và chuyển đổi JSON thành mảng và mảng thành JSON với sự trợ giúp của các ví dụ.

Chúng tôi cũng sẽ khám phá cách đọc và viết các tệp JSON trong PHP. Cuối cùng, chúng ta sẽ xem xét cách truyền phát một tệp JSON lớn trong khi sử dụng rất ít bộ nhớ.

Toàn bộ mã và ví dụ có sẵn trong kho lưu trữ GitHub; Nó được đóng gói như một dự án Symfony đơn giản và cung cấp hình ảnh Docker.

Ví dụ về chuỗi JSON

Trong hướng dẫn này, chúng tôi sẽ sử dụng chuỗi JSON sau đây chứa danh sách phim và thuộc tính của chúng.

[
{
"id": "287947",
"title": "Shazam!",
"poster": "https://image.tmdb.org/t/p/w500/xnopI5Xtky18MPhK40cZAGAOVeV.jpg",
"overview": "A boy is given the ability to become an adult superhero in times of need with a single magic word.",
"release_date": "1553299200",
"genres": [
"Action",
"Comedy",
"Fantasy"
]
},
{
"id": "299537",
"title": "Captain Marvel",
"poster": "https://image.tmdb.org/t/p/w500/AtsgWhDnHTq68L0lLsUrCnM7TjG.jpg",
"overview": "The story follows Carol Danvers as she becomes one of the universe\u2019s most powerful heroes when Earth is caught in the middle of a galactic war between two alien races. Set in the 1990s, Captain Marvel is an all-new adventure from a previously unseen period in the history of the Marvel Cinematic Universe.",
"release_date": "1551830400",
"genres": [
"Action",
"Adventure",
"Science Fiction"
]
}
]

Chuyển đổi chuỗi JSON thành một mảng kết hợp bằng cách sử dụng json_decode

Chúng tôi sử dụng

 $first, "last" => $last);

file_put_contents($file, json_encode($json));

?>
9 để chuyển đổi (giải mã) chuỗi thành mảng kết hợp PHP.

Tham số thứ hai của

 $first, "last" => $last);

file_put_contents($file, json_encode($json));

?>
9 chỉ định nếu chúng ta muốn lấy mỗi đối tượng JSON dưới dạng một mảng kết hợp hoặc là một đối tượng. Ở đây, chúng tôi đi cho tùy chọn mảng kết hợp.

$jsonString = '[{"id":"287947","title":"Shazam!","poster":"https:\/\/image.tmdb.org\/t\/p\/w500\/xnopI5Xtky18MPhK40cZAGAOVeV.jpg","overview":"A boy is given the ability to become an adult superhero in times of need with a single magic word.","release_date":"1553299200","genres":["Action","Comedy","Fantasy"]},{"id":"299537","title":"Captain Marvel","poster":"https:\/\/image.tmdb.org\/t\/p\/w500\/AtsgWhDnHTq68L0lLsUrCnM7TjG.jpg","overview":"The story follows Carol Danvers as she becomes one of the universe\u2019s most powerful heroes when Earth is caught in the middle of a galactic war between two alien races. Set in the 1990s, Captain Marvel is an all-new adventure from a previously unseen period in the history of the Marvel Cinematic Universe.","release_date":"1551830400","genres":["Action","Adventure","Science Fiction"]}]';
$jsonArray = json_decode($jsonString, true); // true for associative arrays, false for objects
var_dump($jsonArray);

Kết quả là một mảng chứa một mảng kết hợp cho mỗi bộ phim. Các khóa của mỗi mảng kết hợp là các trường của đối tượng JSON.

array(2) {
[0]=>
array(6) {
["id"]=>
string(6) "287947"
["title"]=>
string(7) "Shazam!"
["poster"]=>
string(63) "https://image.tmdb.org/t/p/w500/xnopI5Xtky18MPhK40cZAGAOVeV.jpg"
["overview"]=>
string(98) "A boy is given the ability to become an adult superhero in times of need with a single magic word."
["release_date"]=>
string(10) "1553299200"
["genres"]=>
array(3) {
[0]=>
string(6) "Action"
[1]=>
string(6) "Comedy"
[2]=>
string(7) "Fantasy"
}
}
[1]=> // ... the second movie
}

Chuyển đổi một mảng kết hợp thành chuỗi JSON bằng cách sử dụng json_encode

Chúng tôi sử dụng

$json[$user] = array("first" => $first, "last" => $last);
1 để chuyển đổi (mã hóa) mảng kết hợp thành chuỗi JSON.

Tham số thứ hai của

$json[$user] = array("first" => $first, "last" => $last);
1 chỉ định định dạng của chuỗi. Chúng ta có thể đi cho tùy chọn nhỏ gọn theo mặc định. Chúng ta cũng có thể sử dụng định dạng đẹp; Nó bao gồm các giao dịch và không gian để làm cho kết quả có thể đọc được nhiều hơn.

$jsonArray = [
[
"id" => "287947",
"title" => "Shazam!",
"poster" => "https://image.tmdb.org/t/p/w500/xnopI5Xtky18MPhK40cZAGAOVeV.jpg",
"overview" => "A boy is given the ability to become an adult superhero in times of need with a single magic word.",
"release_date" => "1553299200",
"genres"=> ["Action", "Comedy", "Fantasy"]
],
[
"id" => "299537",
"title" => "Captain Marvel",
"poster" => "https://image.tmdb.org/t/p/w500/AtsgWhDnHTq68L0lLsUrCnM7TjG.jpg",
"overview" => "The story follows Carol Danvers as she becomes one of the universe’s most powerful heroes when Earth is caught in the middle of a galactic war between two alien races. Set in the 1990s, Captain Marvel is an all-new adventure from a previously unseen period in the history of the Marvel Cinematic Universe.",
"release_date" => "1551830400",
"genres"=> ["Action", "Adventure", "Science Fiction"]
]
];
// compact format
$compactJsonString = json_encode($jsonArray);
echo $compactJsonString.PHP_EOL;
// pretty human-readable format
$prettyJsonString = json_encode($jsonArray, JSON_PRETTY_PRINT);
echo $prettyJsonString.PHP_EOL;

Định dạng chuỗi JSON nhỏ gọn:

[{"id":"287947","title":"Shazam!","poster":"https:\/\/image.tmdb.org\/t\/p\/w500\/xnopI5Xtky18MPhK40cZAGAOVeV.jpg","overview":"A boy is given the ability to become an adult superhero in times of need with a single magic word.","release_date":"1553299200","genres":["Action","Comedy","Fantasy"]},{"id":"299537","title":"Captain Marvel","poster":"https:\/\/image.tmdb.org\/t\/p\/w500\/AtsgWhDnHTq68L0lLsUrCnM7TjG.jpg","overview":"The story follows Carol Danvers as she becomes one of the universe\u2019s most powerful heroes when Earth is caught in the middle of a galactic war between two alien races. Set in the 1990s, Captain Marvel is an all-new adventure from a previously unseen period in the history of the Marvel Cinematic Universe.","release_date":"1551830400","genres":["Action","Adventure","Science Fiction"]}]

Định dạng chuỗi JSON xinh đẹp:

[
{
"id": "287947",
"title": "Shazam!",
"poster": "https:\/\/image.tmdb.org\/t\/p\/w500\/xnopI5Xtky18MPhK40cZAGAOVeV.jpg",
"overview": "A boy is given the ability to become an adult superhero in times of need with a single magic word.",
"release_date": "1553299200",
"genres": [
"Action",
"Comedy",
"Fantasy"
]
},
{
"id": "299537",
"title": "Captain Marvel",
"poster": "https:\/\/image.tmdb.org\/t\/p\/w500\/AtsgWhDnHTq68L0lLsUrCnM7TjG.jpg",
"overview": "The story follows Carol Danvers as she becomes one of the universe\u2019s most powerful heroes when Earth is caught in the middle of a galactic war between two alien races. Set in the 1990s, Captain Marvel is an all-new adventure from a previously unseen period in the history of the Marvel Cinematic Universe.",
"release_date": "1551830400",
"genres": [
"Action",
"Adventure",
"Science Fiction"
]
}
]

Đọc tệp JSON trong PHP

Chúng tôi sẽ sử dụng cùng một định dạng ở đây; Tệp

$json[$user] = array("first" => $first, "last" => $last);
3 chứa danh sách 10 bộ phim:

[
{
"id": "287947",
"title": "Shazam!",
"poster": "https://image.tmdb.org/t/p/w500/xnopI5Xtky18MPhK40cZAGAOVeV.jpg",
"overview": "A boy is given the ability to become an adult superhero in times of need with a single magic word.",
"release_date": "1553299200",
"genres": [
"Action",
"Comedy",
"Fantasy"
]
},
{
"id": "299537",
"title": "Captain Marvel",
"poster": "https://image.tmdb.org/t/p/w500/AtsgWhDnHTq68L0lLsUrCnM7TjG.jpg",
"overview": "The story follows Carol Danvers as she becomes one of the universe\u2019s most powerful heroes when Earth is caught in the middle of a galactic war between two alien races. Set in the 1990s, Captain Marvel is an all-new adventure from a previously unseen period in the history of the Marvel Cinematic Universe.",
"release_date": "1551830400",
"genres": [
"Action",
"Adventure",
"Science Fiction"
]
},
// ... and more lines
]

Chúng tôi phân tích tệp JSON bằng các hàm PHP gốc:

  1. Mở và đọc nội dung của tệp với
    $json[$user] = array("first" => $first, "last" => $last);
    
    4
  2. Chuyển đổi chuỗi JSON thành một mảng kết hợp với
    $json[$user] = array("first" => $first, "last" => $last);
    
    5
  3. In mảng kết hợp với
    $json[$user] = array("first" => $first, "last" => $last);
    
    6

 $first, "last" => $last);

file_put_contents($file, json_encode($json));

?>
0

Kết quả:

 $first, "last" => $last);

file_put_contents($file, json_encode($json));

?>
1

Viết tệp JSON trong PHP

Chúng tôi tạo và viết một tệp JSON từ một mảng kết hợp:

  1. Chuyển đổi danh sách mảng kết hợp thành chuỗi JSON với
    $json[$user] = array("first" => $first, "last" => $last);
    
    7
  2. Mở tệp JSON mới bằng
    $json[$user] = array("first" => $first, "last" => $last);
    
    8
  3. Viết chuỗi JSON bằng
    $json[$user] = array("first" => $first, "last" => $last);
    
    9
  4. Đóng tệp với
    [
    {
    "id": "287947",
    "title": "Shazam!",
    "poster": "https://image.tmdb.org/t/p/w500/xnopI5Xtky18MPhK40cZAGAOVeV.jpg",
    "overview": "A boy is given the ability to become an adult superhero in times of need with a single magic word.",
    "release_date": "1553299200",
    "genres": [
    "Action",
    "Comedy",
    "Fantasy"
    ]
    },
    {
    "id": "299537",
    "title": "Captain Marvel",
    "poster": "https://image.tmdb.org/t/p/w500/AtsgWhDnHTq68L0lLsUrCnM7TjG.jpg",
    "overview": "The story follows Carol Danvers as she becomes one of the universe\u2019s most powerful heroes when Earth is caught in the middle of a galactic war between two alien races. Set in the 1990s, Captain Marvel is an all-new adventure from a previously unseen period in the history of the Marvel Cinematic Universe.",
    "release_date": "1551830400",
    "genres": [
    "Action",
    "Adventure",
    "Science Fiction"
    ]
    }
    ]
    0

 $first, "last" => $last);

file_put_contents($file, json_encode($json));

?>
2

CSV cho các giá trị được phân tách bằng dấu phẩy là một định dạng tiêu chuẩn khác để trao đổi dữ liệu giữa các ứng dụng và việc chuyển đổi từ JSON sang CSV (và từ CSV sang JSON) khá đơn giản.

Ra khỏi trí nhớ!

Khi đọc một tệp JSON lớn, bạn sẽ nhanh chóng gặp phải sự cố tiêu thụ bộ nhớ: "Lỗi: cho phép kích thước bộ nhớ của x byte cạn kiệt".

Nó bình thường! Các phương thức gốc tải toàn bộ nội dung trong bộ nhớ. Bạn có thể nâng

[
{
"id": "287947",
"title": "Shazam!",
"poster": "https://image.tmdb.org/t/p/w500/xnopI5Xtky18MPhK40cZAGAOVeV.jpg",
"overview": "A boy is given the ability to become an adult superhero in times of need with a single magic word.",
"release_date": "1553299200",
"genres": [
"Action",
"Comedy",
"Fantasy"
]
},
{
"id": "299537",
"title": "Captain Marvel",
"poster": "https://image.tmdb.org/t/p/w500/AtsgWhDnHTq68L0lLsUrCnM7TjG.jpg",
"overview": "The story follows Carol Danvers as she becomes one of the universe\u2019s most powerful heroes when Earth is caught in the middle of a galactic war between two alien races. Set in the 1990s, Captain Marvel is an all-new adventure from a previously unseen period in the history of the Marvel Cinematic Universe.",
"release_date": "1551830400",
"genres": [
"Action",
"Adventure",
"Science Fiction"
]
}
]
1 cho đến khi đạt đến giới hạn bộ nhớ của máy chủ. Một số tập tin lớn đến mức nó sẽ không đủ.

Tin tuyệt vời, có một cách tiếp cận khác;Hãy khám phá nó.

Truyền phát một tệp JSON lớn

Chúng tôi sử dụng tệp JSON bao gồm các bản ghi phim 500K;Nó có trọng lượng gần 300MB:

 $first, "last" => $last);

file_put_contents($file, json_encode($json));

?>
3

Chúng tôi sẽ cài đặt và sử dụng thư viện

[
{
"id": "287947",
"title": "Shazam!",
"poster": "https://image.tmdb.org/t/p/w500/xnopI5Xtky18MPhK40cZAGAOVeV.jpg",
"overview": "A boy is given the ability to become an adult superhero in times of need with a single magic word.",
"release_date": "1553299200",
"genres": [
"Action",
"Comedy",
"Fantasy"
]
},
{
"id": "299537",
"title": "Captain Marvel",
"poster": "https://image.tmdb.org/t/p/w500/AtsgWhDnHTq68L0lLsUrCnM7TjG.jpg",
"overview": "The story follows Carol Danvers as she becomes one of the universe\u2019s most powerful heroes when Earth is caught in the middle of a galactic war between two alien races. Set in the 1990s, Captain Marvel is an all-new adventure from a previously unseen period in the history of the Marvel Cinematic Universe.",
"release_date": "1551830400",
"genres": [
"Action",
"Adventure",
"Science Fiction"
]
}
]
2.

 $first, "last" => $last);

file_put_contents($file, json_encode($json));

?>
4

JSON Machine là một trình phân tích cú pháp luồng PHP JSON hiệu quả dựa trên các trình tạo.

Đọc tệp JSON lớn của chúng tôi:

 $first, "last" => $last);

file_put_contents($file, json_encode($json));

?>
5

Và đây là kết quả:

 $first, "last" => $last);

file_put_contents($file, json_encode($json));

?>
6

Có, chúng tôi đã phân tích các bản ghi JSON 500K của chúng tôi trong 20 giây và chỉ sử dụng 8MB!

Chúng tôi không thể dự đoán tệp sẽ tích hợp lớn như thế nào trong một số trường hợp.Sử dụng phương pháp phát trực tuyến sẽ làm cho mã của bạn mạnh mẽ hơn, nhanh chóng, tiết kiệm bộ nhớ và chống trong tương lai.

Tải xuống mã và ví dụ

Bạn có thể tìm thấy tất cả các mã và ví dụ trong kho GitHub này.

Nó được đóng gói như một dự án Symfony đơn giản, một bộ lệnh, nó cũng đi kèm với hình ảnh Docker.🐋