json_encode স্পর্শ পিএইচপি অ্যারে হিসাবে JSON অ্যারে, JSON অবজেক্ট হিসাবে না


119

আমার পিএইচপি-তে নিম্নলিখিত অ্যারে রয়েছে:

Array
(
    [0] => Array
        (
            [id] => 0
            [name] => name1
            [short_name] => n1
        )

    [2] => Array
        (
            [id] => 2
            [name] => name2
            [short_name] => n2
        )
)

আমি নীচের মত একটি স্ট্রিং উত্পাদন করে JSON এটিকে JSON অ্যারে হিসাবে এনকোড করতে চাই:

[  
    {  
        "id":0,
        "name":"name1",
        "short_name":"n1"
    },
    {  
        "id":2,
        "name":"name2",
        "short_name":"n2"
    }
]

তবে যখন আমি json_encodeএই অ্যারেটিতে কল করি তখন আমি নিম্নলিখিতটি পাই:

{  
    "0":{  
        "id":0,
        "name":"name1",
        "short_name":"n1"
    },
    "2":{  
        "id":2,
        "name":"name2",
        "short_name":"n2"
    }
}

যা অ্যারের পরিবর্তে একটি অবজেক্ট।

json_encodeপরিবর্তে আমি কীভাবে আমার অ্যারেটিকে অ্যারে হিসাবে এনকোড করতে পারি ?

উত্তর:


194

আপনি এই আচরণটি পর্যবেক্ষণ করছেন কারণ আপনার অ্যারেটি অনুক্রমিক নয় - এটিতে কী রয়েছে 0এবং 2তবে 1কী হিসাবে এটি নেই ।

শুধু সংখ্যা সূচক থাকা যথেষ্ট নয়। json_encodeআপনার পিএইচপি অ্যারেটি কেবলমাত্র যদি আপনার পিএইচপি অ্যারেটি অনুক্রমিক হয় - তবে এটির কীগুলি যদি 0, 1, 2, 3 হয় ...

আপনার পছন্দসই আচরণটি পেতে ক্রমটি ব্যবহার করে ক্রমান্বয়ে আপনার অ্যারে পুনর্নির্মাণ array_valuesকরতে পারেন। উদাহরণস্বরূপ, নীচের কোডটি আপনার ব্যবহারের ক্ষেত্রে সফলভাবে কাজ করে:

echo json_encode(array_values($input)).

4
তবে কীগুলি কী 0,2গুরুত্বপূর্ণ? আমি একই পরিস্থিতিতে রয়েছি যেখানে আমি অ্যারেটিকে পুনরায় প্রকাশ করতে পারি না।
shyammakwana.me

2
জেএসওএন সহযোগী অ্যারে সমর্থন করে না। উল্লেখ করুন: সরঞ্জাম. ietf.org/html/rfc7159#section-5
Nguyen Van Vinh

74

Arrayমধ্যে JSONসূচীবদ্ধ অ্যারে হয় শুধুমাত্র , তাই কাঠামো আপনি পেতে চেষ্টা করছেন বৈধ JSON / জাভাস্ক্রিপ্ট নয়।

পিএইচপি সহযোগী অ্যারেগুলি JSON এ অবজেক্টস, সুতরাং আপনার যদি সূচকের প্রয়োজন না হয় তবে আপনি এ জাতীয় রূপান্তর করতে পারবেন না।

আপনি যদি এই ধরনের কাঠামো পেতে চান তবে আপনি এটি করতে পারেন:

$indexedOnly = array();

foreach ($associative as $row) {
    $indexedOnly[] = array_values($row);
}

json_encode($indexedOnly);

এমন কিছু ফেরত দেবে:

[
     [0, "name1", "n1"],
     [1, "name2", "n2"],
]

1
আমাকে ইনডেক্সেড অ্যারের ক্লু দেওয়ার জন্য ধন্যবাদ :) সমস্যাটি কি আমি এটিকে এমনভাবে সূচিত করেছিলাম যে আইডিটি সিক্যুয়াল আইডির পরিবর্তে অ্যারের আইডিও ছিল এবং জসন_কেনড এটিকে অ্যারে হিসাবে বেছে নিল না পরিবর্তে অবজেক্ট কারণ অ্যারেটি স্থির ছিল না এটি এখন আপনার সমস্ত সহায়তা করার জন্য ধন্যবাদ ছেলেদের :)

সত্য না. কিছু লাইব্রেরি উপাদানগুলির অন্যতম হিসাবে সূচকযুক্ত অ্যারে হিসাবে এনসোসিয়েটিভ অ্যারে এনকোড করে।
গুস্তাভো

আপনি কী বলতে চাইছেন তা আমি বুঝতে পারি না - মার্টিনের উত্তরের অ্যারেটি সূচিযুক্ত নয় এবং এটি বৈধ জেএসওএন।
এবং অবশেষে

@AndFinally, মার্টিন এর উত্তরে অ্যারের হয় আসলে ইন্ডেক্স, পরোক্ষভাবে। শূন্য থেকে শুরু করে সূচকযুক্ত অ্যারেতে সূচক ছাড়ার ফলাফল results
বরিস গুউরি 21

তারা উত্তর পোস্ট করার সময় ওপি কী চেয়েছিল এই উত্তরটি পুরোপুরি সরবরাহ করতে পারেনি (আশ্চর্যরূপে, ওপি যা চেয়েছিল তা অসম্ভব), এবং তার পরে তাদের সম্পাদনাগুলি এই উত্তরটিকে বর্তমান অবস্থার প্রেক্ষিতে আপাতদৃষ্টিতে বৌদ্ধিকভাবে ভুল রেখে দিয়েছে প্রশ্ন। আপনি এই উত্তরটি মুছতে পারবেন না, যেহেতু এটি গৃহীত হয়েছে, তবে সম্ভবত কোনও মডারেটরের পক্ষে এটি মুছে ফেলার জন্য পতাকা প্রদর্শন করবেন? যেহেতু এটির 5 টিরও বেশি উপরে আপত্তি রয়েছে, আপনি আপনার প্রতিনিধি রাখবেন।
মার্ক আমেরিকা

0

json_decode (s jsondata, সত্য);

সত্য সমস্ত বৈশিষ্ট্যগুলিকে অ্যারে পরিণত করে (ক্রমানুসারে বা না)


ওপি কর্তৃক জিজ্ঞাসিত প্রশ্নের সাথে সম্পর্কিত নয়। ওপি বিশেষত এনকোডিংয়ের সমস্যাটি ব্যবহার করে জিজ্ঞাসা করেছিলjson_encode
pg2286

এটি কীভাবে সম্পর্কিত নয়? এটি json_encode ব্যবহারের একটি উদাহরণ দেখায় যাতে এটি ডেটাটিকে একটি পঠনযোগ্য অ্যারে রূপান্তর করে। ও.পি. এর প্রশ্ন "আমি কীভাবে আমার অ্যারে হিসাবে অ্যারের এনকোড করতে জসন_কোর্ড পেতে পারি" আমার বিট কোডটি ঠিক তাই করে .. আমি "এনকোড" শব্দটির মুখোমুখি হচ্ছি যা আপনাকে গ্রিফ করছে? 'এনকোড' দ্বারা তার অর্থ 'রূপান্তরিত'। এটি হ্রাস করার কারণ নয়।
রবার্ট সিনক্লেয়ার

ওহ আমি এখন আপনার বক্তব্যটি দেখতে পাচ্ছি, আপনি $serialized = json_encode($nonContiguousArray); $unserialize = json_decode($serialized, true); শেষ পর্যন্ত এই জাতীয় কিছুটির প্রস্তাব দিবেন finallySerializedInArrayFormat = json_encode($unserialize);যদি আপনি যা চান ঠিক তাই করেন তবে এটি একটি সামান্য বাতাসযুক্ত সমাধানের মতো মনে হয়েছিল।
pg2286

-1

এটা চেষ্টা কর,

<?php
$arr1=array('result1'=>'abcd','result2'=>'efg'); 
$arr2=array('result1'=>'hijk','result2'=>'lmn'); 
$arr3=array($arr1,$arr2); 
print (json_encode($arr3)); 
?>

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