আমি কীভাবে পিএইচপি দিয়ে জেএসএন থেকে ডেটা বের করব?


214

এটি একটি সাধারণ রেফারেন্স প্রশ্ন এবং উত্তর হতে পারে না যা অনেকগুলি শেষ না করেই শেষ করে "আমার জেএসএনে ডেটা কীভাবে অ্যাক্সেস করব?" প্রশ্ন। পিএইচপি-তে JSON ডিকোডিং এবং ফলাফলগুলি অ্যাক্সেস করার বিস্তৃত বেসিকগুলি পরিচালনা করতে এখানে।

আমার কাছে জেএসএন রয়েছে:

{
    "type": "donut",
    "name": "Cake",
    "toppings": [
        { "id": "5002", "type": "Glazed" },
        { "id": "5006", "type": "Chocolate with Sprinkles" },
        { "id": "5004", "type": "Maple" }
    ]
}

আমি কীভাবে পিএইচপি-তে এটি ডিকোড করব এবং ফলাফল ডেটা অ্যাক্সেস করব?



দয়া করে কি আমি জানতে পারি যে এই প্রশ্নটি কেন 9 টি বা তারও কম ব্যবহারকারীদের স্টকওভারফ্লো / প্রশ্নগুলি / 4343596/parsing-json-file-with-php এর সদৃশ হিসাবে চিহ্নিত করা হয়েছে তা নকল প্রশ্ন হিসাবে বিবেচনা করবে না ? এম
আমি

@ আইমথমস্টস্টুপিড পার্সন আমি ব্যাখ্যা করার চেষ্টা করব, যদিও আপনার ব্যবহারকারীর নামটি আমাকে সন্দেহ করেছে যে আপনি এটি পেয়ে যাবেন;)। এই প্রশ্নটি জিজ্ঞাসা করা হয়, এবং এর উত্তরগুলি "ক্যানোনিকাল" উপায়ে লেখা হয়। যেমন, এটি অন্যান্য প্রশ্নের তুলনায় সদৃশ টার্গেটের জন্য আরও ভাল প্রাপক।
ফলিক্স গ্যাগন-গ্রেনিয়ার

উত্তর:


428

ইন্ট্রো

প্রথমে আপনার একটি স্ট্রিং আছে। জেএসএন কোনও অ্যারে, কোনও বস্তু বা কোনও ডেটা স্ট্রাকচার নয়। জেএসএন একটি পাঠ্য-ভিত্তিক সিরিয়ালাইজেশন ফর্ম্যাট - তাই অভিনব স্ট্রিং, তবে এখনও একটি স্ট্রিং। পিএইচপি ব্যবহার করে এটি ডিকোড করুন json_decode()

 $data = json_decode($json);

সেখানে আপনি খুঁজে পেতে পারেন:

এগুলি JSON এ এনকোড করা যায়। বা আরও সঠিকভাবে, এগুলি হল JSON এ এনকোড করা যায় এমন জিনিসগুলির পিএইচপি'র সংস্করণ।

তাদের সম্পর্কে বিশেষ কিছু নেই। এগুলি "JSON অবজেক্টস" বা "জেএসএন অ্যারে" নয়। আপনি জেএসওনকে ডিকোড করেছেন - আপনার এখন প্রতিদিনের বেসিক পিএইচপি টাইপ রয়েছে

অবজেক্টস হবে স্টডি ক্লাসের উদাহরণ , একটি বিল্ট-ইন ক্লাস যা কেবল একটি জেনেরিক জিনিস যা এখানে গুরুত্বপূর্ণ নয়।


অবজেক্টের বৈশিষ্ট্য অ্যাক্সেস করা হচ্ছে

আপনি অন্য যে কোনও অবজেক্টের সার্বজনীন অ স্থিত বৈশিষ্ট্যগুলির জন্য যেমনভাবে এই বিষয়গুলির একটির বৈশিষ্ট্য অ্যাক্সেস করেন $object->property

$json = '
{
    "type": "donut",
    "name": "Cake"
}';

$yummy = json_decode($json);

echo $yummy->type; //donut

অ্যারে উপাদানগুলিতে অ্যাক্সেস করা হচ্ছে

আপনি এই অ্যারেগুলির একটিতে যেমন অ্যাক্সেস করেন ঠিক তেমনভাবে আপনি অন্য কোনও অ্যারে যেমন করেন $array[0]

$json = '
[
    "Glazed",
    "Chocolate with Sprinkles",
    "Maple"
]';

$toppings = json_decode($json);

echo $toppings[1]; //Chocolate with Sprinkles

এটি দিয়ে ইটারেট করুন foreach

foreach ($toppings as $topping) {
    echo $topping, "\n";
}

স্প্রিংলস ম্যাপেলের
সাথে গ্লোজড চকোলেট

বা যে কোনও বাজিলিয়ন অন্তর্নির্মিত অ্যারে ফাংশন সম্পর্কে গণ্ডগোল


নেস্টেড আইটেম অ্যাক্সেস করা

অবজেক্টের বৈশিষ্ট্য এবং অ্যারের উপাদানগুলি আরও বেশি অবজেক্ট এবং / অথবা অ্যারে হতে পারে - আপনি কেবল তাদের বৈশিষ্ট্য এবং সদস্যদের যথারীতি অ্যাক্সেস করতে চালিয়ে যেতে পারেন, যেমন $object->array[0]->etc

$json = '
{
    "type": "donut",
    "name": "Cake",
    "toppings": [
        { "id": "5002", "type": "Glazed" },
        { "id": "5006", "type": "Chocolate with Sprinkles" },
        { "id": "5004", "type": "Maple" }
    ]
}';

$yummy = json_decode($json);

echo $yummy->toppings[2]->id; //5004

Json_decode ()true এ দ্বিতীয় আর্গুমেন্ট হিসাবে উত্তীর্ণ

আপনি যখন এটি করেন, বস্তুর পরিবর্তে আপনি সম্মিলিত অ্যারে পাবেন - কীগুলির জন্য স্ট্রিং সহ অ্যারেগুলি। আবার আপনি যথারীতি এর উপাদানগুলিতে অ্যাক্সেস করেন $array['key']

$json = '
{
    "type": "donut",
    "name": "Cake",
    "toppings": [
        { "id": "5002", "type": "Glazed" },
        { "id": "5006", "type": "Chocolate with Sprinkles" },
        { "id": "5004", "type": "Maple" }
    ]
}';

$yummy = json_decode($json, true);

echo $yummy['toppings'][2]['type']; //Maple

সহযোগী অ্যারে আইটেম অ্যাক্সেস করা

কোনও এসোসিয়েটিভ পিএইচপি অ্যারেতে কোনও JSON অবজেক্টটি ডিকোড করার সময়, আপনি foreach (array_expression as $key => $value)বাক্য গঠন এবং বাক্য দুটিই বাক্য গঠন ব্যবহার করতে পারেন , উদাহরণস্বরূপ

$json = '
{
    "foo": "foo value",
    "bar": "bar value",
    "baz": "baz value"
}';

$assoc = json_decode($json, true);
foreach ($assoc as $key => $value) {
    echo "The value of key '$key' is '$value'", PHP_EOL;
}

ছাপে

কী 'ফু'র মান হ'ল' ফু মান '
কী' বার 'এর মান' বার মান '
কী' বাজ 'এর মান' বাজ মান '


কীভাবে ডেটা কাঠামোবদ্ধ তা জানেন না

আপনি JSON থেকে যা পান তা ডকুমেন্টেশনটি পড়ুন।

জেএসএন-এর দিকে তাকান - যেখানে আপনি কোঁকড়ানো বন্ধনীগুলি {}কোনও বস্তুর প্রত্যাশা করেন, যেখানে আপনি বর্গাকার বন্ধনীগুলি দেখেন[] একটি অ্যারের আশা করে।

একটি দিয়ে ডিকোড করা ডেটা হিট করুন print_r():

$json = '
{
    "type": "donut",
    "name": "Cake",
    "toppings": [
        { "id": "5002", "type": "Glazed" },
        { "id": "5006", "type": "Chocolate with Sprinkles" },
        { "id": "5004", "type": "Maple" }
    ]
}';

$yummy = json_decode($json);

print_r($yummy);

এবং আউটপুট পরীক্ষা করুন:

stdClass Object
(
    [type] => donut
    [name] => Cake
    [toppings] => Array
        (
            [0] => stdClass Object
                (
                    [id] => 5002
                    [type] => Glazed
                )

            [1] => stdClass Object
                (
                    [id] => 5006
                    [type] => Chocolate with Sprinkles
                )

            [2] => stdClass Object
                (
                    [id] => 5004
                    [type] => Maple
                )

        )

)

এটি আপনাকে জানিয়ে দেবে কোথায় আপনার বস্তু আছে, কোথায় অ্যারে রয়েছে তাদের সদস্যদের নাম এবং মান সহ।

আপনি যদি হারিয়ে যাওয়ার আগে কেবলমাত্র এটির মধ্যে প্রবেশ করতে পারেন - তবে অনেক দূরে যান এবং এটি দিয়ে আঘাত করুন print_r():

print_r($yummy->toppings[0]);
stdClass Object
(
    [id] => 5002
    [type] => Glazed
)

এই হ্যান্ডি ইন্টারেক্টিভ জেএসএন এক্সপ্লোরারটিতে এটি একবার দেখুন ।

সমস্যাটি এমন টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো হয়ে যা আপনার মাথাটি চারপাশে মোড়ানো সহজ।


json_decode() আয় null

এটি হয় কারণ:

  1. জেএসএন সম্পূর্ণরূপে ঠিক এটি নিয়ে গঠিত null,।
  2. JSON অবৈধ - ফলাফলটি যাচাই করুন json_last_error_msgবা এটি JSONLint এর মতো কিছুতে রেখে দিন
  3. এটিতে 512 স্তরেরও বেশি গভীর নীচে থাকা উপাদান রয়েছে। এই ডিফল্ট সর্বাধিক গভীরতা তৃতীয় আর্গুমেন্ট হিসাবে পূর্ণসংখ্যা পাস করে ওভাররাইড করা যেতে পারে json_decode()

আপনার যদি সর্বোচ্চ গভীরতা পরিবর্তন করতে হয় তবে আপনি সম্ভবত ভুল সমস্যাটি সমাধান করছেন। আপনি কেন এত গভীরভাবে নেস্টেড ডেটা পেয়েছেন তা খুঁজে বার করুন (যেমন আপনি যে সার্ভিসটি জিজ্ঞাসা করছেন যা জেএসওন তৈরি করছে তার একটি বাগ রয়েছে) এবং তা না ঘটে তা পান।


অবজেক্ট প্রোপার্টি নামটিতে একটি বিশেষ অক্ষর রয়েছে

কখনও কখনও আপনার একটি অবজেক্ট প্রোপার্টি নাম থাকবে যা হাইফেনের মতো কিছু -বা সাইন এ রয়েছে @যা আক্ষরিক শনাক্তকারী হিসাবে ব্যবহার করা যায় না। পরিবর্তে আপনি এটি সম্বোধন করতে কোঁকড়া ধনুর্বন্ধনী মধ্যে একটি স্ট্রিং আক্ষরিক ব্যবহার করতে পারেন।

$json = '{"@attributes":{"answer":42}}';
$thing = json_decode($json);

echo $thing->{'@attributes'}->answer; //42

আপনার যদি সম্পত্তি হিসাবে কোনও পূর্ণসংখ্যা থাকে দেখুন: পূর্ণসংখ্যার মতো নামের সাথে কীভাবে অবজেক্টের বৈশিষ্ট্য অ্যাক্সেস করবেন? রেফারেন্স হিসেবে.


কেউ আপনার JSON এ JSON রাখে

এটি হাস্যকর তবে এটি ঘটে - আপনার JSON এর মধ্যে স্ট্রিং হিসাবে জেএসএন এনকোডেড রয়েছে। ডিকোড, অ্যাক্সেস স্বাভাবিক হিসাবে স্ট্রিং, ডিকোড যে , এবং শেষ পর্যন্ত আপনার যা প্রয়োজন পেতে।

$json = '
{
    "type": "donut",
    "name": "Cake",
    "toppings": "[{ \"type\": \"Glazed\" }, { \"type\": \"Maple\" }]"
}';

$yummy = json_decode($json);
$toppings = json_decode($yummy->toppings);

echo $toppings[0]->type; //Glazed

ডেটা মেমরির সাথে খাপ খায় না

যদি আপনার JSON json_decode()একবারে পরিচালনা করার জন্য খুব বড় হয় তবে জিনিসগুলি জটিল হয়ে উঠতে শুরু করে। দেখা:


কিভাবে এটি বাছাই

দেখুন: তথ্যসূত্র: পিএইচপি-তে অ্যারে এবং ডেটা বাছাই করার সমস্ত প্রাথমিক উপায়


কেবল এই উত্তরে হোঁচট খেয়েছে এবং সন্ধান করেছে যে অ্যারে.আইনক্লিন- ওনস.অর্গ.র লিঙ্কটি নষ্ট হয়েছে ।
জেফ

@ জেফ ধন্যবাদ লজ্জা। আমি লিঙ্কটি সরিয়েছি।
user3942918

হ্যাঁ, লিঙ্কটির নাম এবং আপনি কীভাবে এটি বর্ণনা করেছেন তা বিবেচনা করে দেখে মনে হচ্ছে এটি সত্যিকারের ঝাঁকুনির মতো।
জেফ

এই সমাধানটির একমাত্র জিনিসটির অভাব ছিল কীভাবে অন্য জাসন ফাইল থেকে ডেটা বের করা যায়। : আমি সুপারিশ করবে, এই solutuon stackoverflow.com/questions/19758954/...
ঈশান শ্রীবাস্তব

এটা অসাধারণ. ধন্যবাদ.
ডেভিড কারিউইকি

17

আপনি json_decode () ব্যবহার করতে পারেন স্ট্রিংটিকে পিএইচপি অবজেক্ট / অ্যারে রূপান্তর ।

যেমন।

ইনপুট:

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

var_dump(json_decode($json));
var_dump(json_decode($json, true));

আউটপুট:

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

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

কয়েকটি বিষয় মনে রাখবেন:

  • json_decodeস্ট্রিংটির বৈধ হওয়া দরকার jsonঅন্যথায় এটি ফিরে আসবেNULL
  • ডিকোড করতে ব্যর্থতার পরিস্থিতিতে, json_last_error() করতে হওয়ার ক্ষেত্রে ত্রুটির সঠিক প্রকৃতি নির্ধারণ করতে ব্যবহার করা যেতে পারে।
  • আপনি utf8সামগ্রীতে পাস করেছেন তা নিশ্চিত করুন , বা json_decodeত্রুটি থেকে বেরিয়ে এসে কেবল একটি NULLমান ফেরত দিতে পারেন ।

ভাল, তারা যাইহোক, এর সরলতা পছন্দ করতে পারে না। আপনি সর্বদা upvote করতে পারেন;)
মোহাম্মদ আবদুল মুজিব

1
সম্ভবত আরও সম্ভাব্য কারণ এটি ইতিমধ্যে উত্তর দেওয়া হয়েছে এবং দেখে মনে হচ্ছে @ মোহাম্মদ আবদুলুল মুজিব কিছুটা মুক্ত প্রতিনিধি পরে আছেন
ইসহাক

3
@ আইসাক কিছু লোকেরা কেবল ফাংশনটি ব্যবহার করে শুরু করতে চাইলে পুরো ম্যানুয়ালটি পড়তে খুব আগ্রহী নাও হতে পারে। অন্যথায় তারা সরকারী ডকটি পড়া থেকে ভাল হবে। এসও এর পুরো পয়েন্টটি সরলতা যেখানে উত্তর সরবরাহ করা হয়। আইএমএইচও
মোহাম্মদ আবদুল মুজিব

3
// Using json as php array 

$json = '[{"user_id":"1","user_name":"Sayeed Amin","time":"2019-11-06 13:21:26"}]';

//or use from file
//$json = file_get_contents('results.json');

$someArray = json_decode($json, true);

foreach ($someArray as $key => $value) {
    echo $value["user_id"] . ", " . $value["user_name"] . ", " . $value["time"] . "<br>";
}

1

আমরা পিএইচপি-তে json_decode ফাংশন ব্যবহার করে json স্ট্রিংকে অ্যারেতে ডিকোড করতে পারি

1) json_decode ($ json_string) // এটি প্রত্যাবর্তন করে

2) json_decode ($ json_string, সত্য) // এটি অ্যারে দেয়

$json_string = '{
    "type": "donut",
    "name": "Cake",
    "toppings": [
        { "id": "5002", "type": "Glazed" },
        { "id": "5006", "type": "Chocolate with Sprinkles" },
        { "id": "5004", "type": "Maple" }
    ]
}';
$array = json_decode($json_string,true);

echo $array['type']; //it gives donut

0

Https://packagist.org/packages/flow/jsonpath ব্যবহার বিবেচনা করুনJSONPath

এটি কীভাবে ব্যবহার করবেন এবং প্রস্তাবিত সমস্ত লুপগুলি এড়িয়ে একটি জেএসওএন-ফাইল পার্স করার একটি সুন্দর স্পষ্ট ব্যাখ্যা রয়েছে । আপনার সাথে পরিচিত থাকেন XPathজন্য XMLআপনি এই পদ্ধতির প্রেমময় শুরু হবে।


-1

আমি JSON( গিটহাব , প্যাক্যাগিস্ট ) নামে একটি প্যাকেজ লিখেছি । আপনি যদি ব্যবহারের ওভারহেডগুলি প্রতিরোধ করতে চানjson_* ফাংশনগুলি এটি চেষ্টা করা উচিত।

উদাহরণ

use MAChitgarha\Component\JSON;

$jsonStr = <<<JSON
{
    "type": "donut",
    "name": "Cake",
    "toppings": [
        { "id": "5002", "type": "Glazed" },
        { "id": "5006", "type": "Chocolate with Sprinkles" },
        { "id": "5004", "type": "Maple" }
    ]
}
JSON;

// Create an instance
$json = new JSON($jsonStr);

// Get a nested element using dots
$json->get("toppings.1.type"); // Chocolate with Sprinkles
$json["toppings.1.type"]; // Chocolate with Sprinkles

// Iterate over an element
foreach ($json->iterate("toppings") as $item)
    echo "{$item->id}: {$item->type}", PHP_EOL;

// Change an element
$json->set("toppings.3", [
    "id" => "5000",
    "type" => "Unknown"
]);

// Get data as JSON string, array or object, respectively
$json->getDataAsJson();
$json->getDataAsArray();
$json->getDataAsObject();

দেখুন উইকি বা দ্রুত টিউটোরিয়াল এটা সাথে পরিচিত পেতে।

তদতিরিক্ত, আপনি যদি JSON ফাইলগুলি পড়তে চান এবং এর ডেটা বের করতে চান (যেমন মনে হয় আপনি এটি সম্পাদন করার চেষ্টা করছেন), JSONFile প্যাকেজটি দেখুন, যা আমি এটি লিখেছি।


-2

https://paiza.io/projects/X1QjjBkA8mDo6oVh-J_63w

জসনকে অ্যারে রূপান্তর করার জন্য নীচের কোডটি দেখুন PHP, যদি জেএসএন সঠিক হয় তবে json_decode()ভাল কাজ করে এবং একটি অ্যারের ফিরিয়ে দেবে, তবে যদি জালএসএন জালিয়াঙ্ক করে, তবে এটি ফিরে আসবে NULL,

<?php
function jsonDecode1($json){
    $arr = json_decode($json, true);
    return $arr;
}

// In case of malformed JSON, it will return NULL
var_dump( jsonDecode1($json) );

যদি ত্রুটিযুক্ত JSON, এবং আপনি কেবল অ্যারের আশা করছেন তবে আপনি এই ফাংশনটি ব্যবহার করতে পারেন,

<?php
function jsonDecode2($json){
    $arr = (array) json_decode($json, true);
    return $arr;
}

// In case of malformed JSON, it will return an empty array()
var_dump( jsonDecode2($json) );

যদি ত্রুটিযুক্ত JSON, এবং আপনি কোড সম্পাদন বন্ধ করতে চান, তবে আপনি এই ফাংশনটি ব্যবহার করতে পারেন,

<?php
function jsonDecode3($json){
    $arr = (array) json_decode($json, true);

    if(empty(json_last_error())){
        return $arr;
    }
    else{
        throw new ErrorException( json_last_error_msg() );
    }
}

// In case of malformed JSON, Fatal error will be generated
var_dump( jsonDecode3($json) );

আপনি আপনার প্রয়োজনের উপর নির্ভর করে যে কোনও ফাংশন ব্যবহার করতে পারেন,

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.