json_encode विरल PHP सरणी को JSON सरणी के रूप में, JSON ऑब्जेक्ट के रूप में नहीं


119

मेरे पास PHP में निम्न सरणी है:

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यदि आपकी PHP सरणी अनुक्रमिक है, तो यह केवल आपके PHP सरणी को JSON सरणी के रूप में एन्कोड करेगा - यदि इसकी कुंजियाँ 0, 1, 2, 3, ...

आप अपने सरणी को क्रमिक रूप से array_valuesफ़ंक्शन का उपयोग करके अपने इच्छित व्यवहार को प्राप्त करने के लिए फिर से जोड़ सकते हैं। उदाहरण के लिए, नीचे दिया गया कोड आपके उपयोग के मामले में सफलतापूर्वक काम करता है:

echo json_encode(array_values($input)).

4
लेकिन क्या होगा अगर कुंजी 0,2महत्वपूर्ण हैं? मैं उसी स्थिति में हूं जहां मैं सरणी को रेनडेक्स नहीं कर सकता।
shyammakwana.me

2
JSON सहयोगी सरणी का समर्थन नहीं करता है। देखें: tools.ietf.org/html/rfc7159#section-5
गुयेन वन विन्ह

74

ArrayकेवलJSON अनुक्रमित सरणी में हैं , इसलिए आप जिस संरचना को प्राप्त करने का प्रयास कर रहे हैं, वह वैध Json / जावास्क्रिप्ट नहीं है।

PHP एसोसिएट्स सरणी JSON में ऑब्जेक्ट हैं, इसलिए जब तक आपको इंडेक्स की आवश्यकता नहीं होती है, आप इस तरह के रूपांतरण नहीं कर सकते।

यदि आप ऐसी संरचना प्राप्त करना चाहते हैं, तो आप कर सकते हैं:

$indexedOnly = array();

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

json_encode($indexedOnly);

कुछ इस तरह लौटेगा:

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

1
अनुक्रमित सरणी का सुराग देने के लिए धन्यवाद :) समस्या यह थी कि मैंने इसे इस तरह अनुक्रमित किया कि क्रमिक आईडी के बजाय आईडी भी आईडी की आईडी थी और json_encode ने इसे एक सरणी के रूप में नहीं लिया, लेकिन जैसे इसके बजाय ऑब्जेक्ट क्योंकि अनुक्रम अनुक्रमिक नहीं था, अब आपके सभी मदद करने वालों के लिए धन्यवाद :)

सच नहीं। कुछ लाइब्रेरियों ने ऐररेटिव एरे को ऐक्सैसिव एलीमेंट्स में से एक एलीमेंट प्रॉपर्टी के रूप में एनकोड किया है।
गुस्तावो

मुझे समझ में नहीं आ रहा है कि आपका क्या मतलब है - मार्टिन के जवाब में सरणी गैर अनुक्रमित है, और यह वैध JSON है।
और अंत में

@AndFinally, मार्टिन के जवाब में सरणी है वास्तव में अनुक्रमित, परोक्ष। शून्य से शुरू होने वाले अनुक्रमित सरणी में अनुक्रमणिका परिणाम को छोड़ना।
बोरिस गुएरी

यह जवाब काफी हद तक प्रदान नहीं करता था कि ओपी उस समय क्या चाहते थे जब उन्होंने सवाल पोस्ट किया (अनजाने में, क्योंकि ओपी चाहते थे कि क्या असंभव है), और उसके बाद से उनके संपादनों ने इस उत्तर को गलत तरीके से छोड़ दिया है जो वर्तमान स्थिति को देखते हुए बेतहाशा गलत है। सवाल। आप इस उत्तर को नहीं हटा सकते, क्योंकि यह स्वीकार किया जाता है, लेकिन शायद आपके लिए इसे हटाने के लिए किसी मॉडरेटर के लिए ध्वज? चूंकि इसमें 5 से अधिक upvotes हैं, आप अपना प्रतिनिधि रखेंगे।
मार्क अमेरी

0

json_decode ($ jsondata, true);

सही सभी गुण सरणी (अनुक्रमिक या नहीं) में बदल जाता है


ओपी द्वारा पूछे गए सवाल से संबंधित नहीं है। ओपी ने विशेष रूप से एन्कोडिंग मुद्दे का उपयोग करते हुए पूछाjson_encode
pg2286

यह कैसे संबंधित नहीं है? यह json_encode का उपयोग करने का एक उदाहरण दिखाता है ताकि यह डेटा को पढ़ने योग्य सरणी में बदल दे। ओपी का सवाल है कि "मुझे एक सरणी के रूप में अपनी सरणी को एन्कोड करने के लिए json_encode कैसे मिल सकता है" मेरा बिट कोड बस यही करता है .. मैं इसे शब्द दे रहा हूं "एनकोड" जो आपको ग्रीफ कर रहा है? 'एनकोड' द्वारा उनका अर्थ है 'में बदल जाता है'। यह पतन का कारण नहीं है।
रॉबर्ट सिनक्लेयर

ओह मैं अब अपनी बात देखते हैं, कि आप कुछ इस तरह की सिफारिश करेंगे $serialized = json_encode($nonContiguousArray); $unserialize = json_decode($serialized, true); अंत में finallySerializedInArrayFormat = json_encode($unserialize);अगर यह तुम क्या इरादा कर रहे हैं आप ठीक कह रहे हैं, लेकिन एक छोटे से चढ़ा हुआ समाधान तरह लग रहा था है।
पृष्ठ

-1

इसे इस्तेमाल करे,

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

यह उस समस्या को हल नहीं करता है जो ओपी पूछने की कोशिश कर रहा है।
pg2286
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.