JSON स्ट्रिंग को एरे में कैसे बदलें


123

मैं जो करना चाहता हूं वह निम्नलिखित है:

  1. JSON को पाठ क्षेत्र से php में इनपुट के रूप में लेना
  2. इस इनपुट का उपयोग करें और इसे JSON में कनवर्ट करें और अनुरोध भेजने के लिए इसे php कर्ल को पास करें।

यह मीटर एपी के गेट से php हो रहा है यह json string मैं json को पास करना चाहता हूं लेकिन यह सरणी में परिवर्तित नहीं हो रहा है

echo $str='{
        action : "create",
        record: {
            type: "n$product",
            fields: {
                n$name: "Bread",
                n$price: 2.11
            },
            namespaces: { "my.demo": "n" }
        }
    }';
    $json = json_decode($str, true);

उपरोक्त कोड मुझे सरणी नहीं दे रहा है।


1
क्या आपको json string को array में बदलने की जरूरत है या क्या आप उस डेटा से url बनाना चाहते हैं? वास्तव में सवाल क्या है?
जेनिस वेनबर्ग्स

then it is not givingक्या नहीं दे रहा है? आप textarea से एक JSON स्वरूपित स्ट्रिंग लेते हैं और आप इसे JSON में परिवर्तित करते हैं ???
PeeHaa

1
यदि आप मेरे सवाल json_decode में ऊपर json कर (सच) यह एक सरणी retuns है
Xmen

@Pekka कृपया मेरे quesiton को फिर से जांचें।
एक्समेन

3
अमान्य json समस्या यह थी।
एक्समेन

जवाबों:


187

यदि आप अपने पोस्ट में JSON पास करते हैं json_decode, तो यह विफल हो जाएगा। मान्य JSON तार कुंजी उद्धृत किया गया है:

json_decode('{foo:"bar"}');         // this fails
json_decode('{"foo":"bar"}', true); // returns array("foo" => "bar")
json_decode('{"foo":"bar"}');       // returns an object, not an array.

यदि आप मेरे सवाल json_decode में ऊपर json कर (सच) यह एक सरणी retuns है
Xmen

@RahulMehta यदि आप PHP के अंतर्निहित का उपयोग कर रहे json_decode()हैं, NULLतो यदि आपका JSON अमान्य है (उदाहरण के लिए, कोई उद्धृत कुंजी नहीं) तो यह वापस आ जाएगा । यही प्रलेखन कहता है और यही मेरा PHP 5.2 इंस्टॉलेशन रिटर्न है। क्या आप आधिकारिक, बिल्ट-इन के अलावा अन्य फ़ंक्शन का उपयोग कर रहे हैं json_decode()? क्या var_dump(json_decode($str, true));लौटाता है?
रिकन

json_encoding के बाद, मैं सरणी में एक वस्तु के रूप में प्रत्येक व्यक्तिगत json ऑब्जेक्ट जैसे {foo: "bar"} पढ़ना चाहूंगा। मैं प्रत्येक json ऑब्जेक्ट को पढ़ने के लिए json_encoded डेटा से एक सरणी कैसे बना सकता हूं? @ रिक्कुसुरुकस
मैन्नी 265

@ Manny265 जो कुछ ऐसा लगता है जो (1) कुछ नमूना कोड के साथ अपने स्वयं के प्रश्न का हकदार है, (2) आपने इस टिप्पणी अनुभाग के बजाय अपेक्षित परिणाम और (3) अपेक्षित परिणाम प्राप्त किए हैं।
रिकन

96

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

$data = json_decode($your_json_string, TRUE);

दूसरा पैरामीटर डिकोडेड जोंस स्ट्रिंग को एक सहयोगी सरणियों में बना देगा।


30

आप फार्म से JSON स्ट्रिंग मिल रहे हैं का उपयोग कर $_REQUEST, $_GETया $_POSTआप फ़ंक्शन का उपयोग करने की आवश्यकता होगी html_entity_decode()। मुझे इस बात का अहसास नहीं हुआ कि जब तक मैंने var_dumpअनुरोध में क्या किया था, मैंने क्या किया और क्या कियाecho बयान दिया और देखा कि अनुरोध स्ट्रिंग बहुत बड़ा था।

सही तरीका:

$jsonText = $_REQUEST['myJSON'];
$decodedText = html_entity_decode($jsonText);
$myArray = json_decode($decodedText, true);

त्रुटियों के साथ:

$jsonText = $_REQUEST['myJSON'];
$myArray = json_decode($jsonText, true);
echo json_last_error(); //Returns 4 - Syntax error;

2
बिल्कुल सही, यह काम करता है। जब मुझे $ _POST फ़ंक्शन से डेटा मिलता है json_last_error () = से JSON_ERROR_SYNAMAX। लेकिन सभी रास्ते ठीक थे। यह डिकोड की त्रुटि थी, जैसे कि अस्की या utf8 एनकोड की त्रुटि नहीं। धन्यवाद

11

json_decode($json_string, TRUE)JSON ऑब्जेक्ट को किसी सरणी में बदलने के लिए फ़ंक्शन का उपयोग करें ।

उदाहरण:

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

$my_array_data = json_decode($json_string, TRUE);

नोट: दूसरा पैरामीटर डिकोड्ड JSON स्ट्रिंग को एक सहयोगी सरणी में बदल देगा।

===========

आउटपुट:

var_dump($my_array_data);

array(5) {

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

6

यदि आप URL का उपयोग करके json स्ट्रिंग प्राप्त कर रहे हैं file_get_contents, तो निम्न चरणों का पालन करें:

$url = "http://localhost/rest/users";  //The url from where you are getting the contents
$response = (file_get_contents($url)); //Converting in json string
 $n = strpos($response, "[");
$response = substr_replace($response,"",0,$n+1);
$response = substr_replace($response, "" , -1,1);
print_r(json_decode($response,true));

6

आपकी स्ट्रिंग निम्न प्रारूप में होनी चाहिए:

$str = '{"action": "create","record": {"type": "n$product","fields": {"n$name": "Bread","n$price": 2.11},"namespaces": { "my.demo": "n" }}}';
$array = json_decode($str, true);

echo "<pre>";
print_r($array);

आउटपुट:

Array
 (
    [action] => create
    [record] => Array
        (
            [type] => n$product
            [fields] => Array
                (
                    [n$name] => Bread
                    [n$price] => 2.11
                )

            [namespaces] => Array
                (
                    [my.demo] => n
                )

        )

)

2

आप json Object को Array & String में बदल सकते हैं।

$data='{"resultList":[{"id":"1839","displayName":"Analytics","subLine":""},{"id":"1015","displayName":"Automation","subLine":""},{"id":"1084","displayName":"Aviation","subLine":""},{"id":"554","displayName":"Apparel","subLine":""},{"id":"875","displayName":"Aerospace","subLine":""},{"id":"1990","displayName":"Account Reconciliation","subLine":""},{"id":"3657","displayName":"Android","subLine":""},{"id":"1262","displayName":"Apache","subLine":""},{"id":"1440","displayName":"Acting","subLine":""},{"id":"710","displayName":"Aircraft","subLine":""},{"id":"12187","displayName":"AAC","subLine":""}, {"id":"20365","displayName":"AAT","subLine":""}, {"id":"7849","displayName":"AAP","subLine":""}, {"id":"20511","displayName":"AACR2","subLine":""}, {"id":"28585","displayName":"AASHTO","subLine":""}, {"id":"45191","displayName":"AAMS","subLine":""}]}';

$b=json_decode($data);

$i=0;
while($b->{'resultList'}[$i])
{
    print_r($b->{'resultList'}[$i]->{'displayName'});
    echo "<br />";
    $i++;
}

1

यदि आपको कभी भी JSON फ़ाइल या संरचनाओं को PHP-शैली सरणियों में परिवर्तित करने की आवश्यकता है, तो सभी घोंसले के स्तर के साथ, आप इस फ़ंक्शन का उपयोग कर सकते हैं। सबसे पहले, आपको json_decode ($ yourJSONdata) करना होगा और फिर इसे इस फ़ंक्शन में पास करना होगा। यह आपकी ब्राउज़र विंडो (या कंसोल) पर सही PHP स्टाइल एरेज़ का आउटपुट देगा।

https://github.com/mobsted/jsontophparray


1
<?php
$str='{
    "action" : "create",
    "record" : {
                "type": "$product",
                "fields": {
                           "name": "Bread",
                           "price": "2.11"
                           },
                "namespaces": { "my.demo": "n" }
                }
    }';
echo $str;
echo "<br>";
$jsonstr = json_decode($str, true);
print_r($jsonstr);

?>

मुझे लगता है कि यह काम करना चाहिए, बस यह है कि कुंजी भी दोहरे उद्धरण चिह्नों में होनी चाहिए यदि वे अंक नहीं हैं।


1

यह मेरा समाधान है: json string $columns_validation = string(1736) "[{"colId":"N_ni","hide":true,"aggFunc":null,"width":136,"pivotIndex":null,"pinned":null,"rowGroupIndex":null},{"colId":"J_2_fait","hide":true,"aggFunc":null,"width":67,"pivotIndex":null,"pinned":null,"rowGroupIndex":null}]"

इसलिए मैं दो बार json_decode का उपयोग करता हूं:

$js_column_validation = json_decode($columns_validation);
$js_column_validation = json_decode($js_column_validation); 

var_dump($js_column_validation);

और परिणाम है:

 array(15) { [0]=> object(stdClass)#23 (7) { ["colId"]=> string(4) "N_ni" ["hide"]=> bool(true) ["aggFunc"]=> NULL ["width"]=> int(136) ["pivotIndex"]=> NULL ["pinned"]=> NULL ["rowGroupIndex"]=> NULL } [1]=> object(stdClass)#2130 (7) { ["colId"]=> string(8) "J_2_fait" ["hide"]=> bool(true) ["aggFunc"]=> NULL ["width"]=> int(67) ["pivotIndex"]=> NULL ["pinned"]=> NULL ["rowGroupIndex"]=> NULL }

थैंक्यू भाई ... आपने मेरा दिन बचाया
नुवान विथानेज

1

सुनिश्चित करें कि स्ट्रिंग निम्नलिखित JSON प्रारूप में है जो कुछ इस प्रकार है:

{"result":"success","testid":"1"} (with " ") .

यदि नहीं, तो आप "responsetype => json"अपने अनुरोध में जोड़ सकते हैं ।

फिर json_decode($response,true)इसे एक ऐरे में बदलने के लिए उपयोग करें।


1
StackOverflow में आपका स्वागत है :-) समुदाय हमेशा नए सदस्यों के लिए खुश है जो इसमें योगदान देना चाहते हैं और आपके दृष्टिकोण की सराहना करते हैं। अफसोस की बात है कि एक अन्य सदस्य ने कहा कि आपका जवाब एक योग्य है। यह हो सकता है, क्योंकि सवाल खुद से लगभग सात साल पहले पूछा गया था और पहले से ही कई बार उत्तर दिया गया था। इसके अलावा responseTypeसंपत्ति का उपयोग अनुरोध के जवाब में डेटा के प्रकार को निर्धारित करने के लिए किया जाता है। फिर भी समस्या यह है, कि अनुरोध निकाय में ऐसे डेटा होते हैं जो अपने आप में सही नहीं होते हैं। इसलिए आपका उत्तर दिए गए संदर्भ के अनुकूल नहीं है।
फिलिप मौरर

1

आप एक स्ट्रिंग को JSON में निम्नानुसार बदल सकते हैं और यदि आप चाहते हैं तो स्ट्रिंग पर पट्टी, पट्टी भी कर सकते हैं।

$str     = '[{"id":1, "value":"Comfort Stretch"}]';
//here is JSON object
$filters = json_decode($str);

foreach($filters as $obj){
   $filter_id[] = $obj->id;
}

//here is your array from that JSON
$filter_id;

0

इस कनवर्टर का उपयोग करें, यह बिल्कुल भी विफल नहीं होता है: Services_Json

// create a new instance of Services_JSON
$json = new Services_JSON();

// convert a complexe value to JSON notation, and send it to the browser
$value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4)));
$output = $json->encode($value);
print($output);
// prints: ["foo","bar",[1,2,"baz"],[3,[4]]]

// accept incoming POST data, assumed to be in JSON notation
$input = file_get_contents('php://input', 1000000);
$value = $json->decode($input);

// if you want to convert json to php arrays:
$json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);

-2
$data = json_encode($result, true);

echo $data;

2
हालांकि यह कोड इस प्रश्न का उत्तर दे सकता है, कि यह कोड क्यों और / या इस बारे में अतिरिक्त संदर्भ प्रदान करता है कि यह प्रश्न इसके दीर्घकालिक मूल्य में सुधार करता है।
रोलस्टुफ़्लोरहेयर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.