JSON dizesini diziye dönüştürme


123

Yapmak istediğim şey şudur:

  1. JSON'u php'de metin alanından girdi olarak almak
  2. bu girişi kullanın ve JSON'a dönüştürün ve istek göndermek için php curl'ye geçirin.

Bu m api'den php'ye ulaşıyor bu json dizesi json'a geçmek istiyorum ama diziye dönüştürmüyor

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);

yukarıdaki kod bana dizisini döndürmüyor.


1
Json dizesini diziye dönüştürmeniz gerekiyor VEYA bu veriden bir url oluşturmak istiyor musunuz? Soru tam olarak nedir?
Janis Veinbergs

then it is not givingNeyi vermemek? Metin alanından JSON biçimli bir dize alırsınız ve bunu JSON'a dönüştürürsünüz ???
PeeHaa

1
Benim soru json_decode yukarıdaki json yaparsanız (true) bir dizi retuns gelmez
XMen

@Pekka Lütfen sorularımı tekrar kontrol edin.
XMen

3
geçersiz json sorunu bu oldu.
XMen

Yanıtlar:


187

Gönderinizdeki JSON'u json_decodeadresine iletirseniz başarısız olur. Geçerli JSON dizeleri tırnak içinde anahtarlara sahiptir:

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.

Benim soru json_decode yukarıdaki json yaparsanız (true) bir dizi retuns gelmez
XMen

@RahulMehta PHP'nin yerleşik özelliğini kullanıyorsanız, JSON'nuz geçersizse (örneğin, tırnak işaretli anahtarlar yoksa) json_decode()geri dönecektir NULL. Dokümantasyon böyle diyor ve PHP 5.2 kurulumumun getirdiği şey bu. Resmi, yerleşik dışında bir işlev mi kullanıyorsunuz json_decode()? Ne var_dump(json_decode($str, true));dönüyor?
RickN

json_encoding'den sonra, her bir json nesnesini, örneğin dizideki bir nesne olarak {foo: "bar"} okumak istiyorum. json_encoded verilerinden her bir json nesnesini okumak için nasıl bir dizi oluşturabilirim? @RikkusRukkus
Manny265

@ Manny265 (1) bazı örnek kodlarla, (2) şimdiye kadar denediklerinizle ve (3) bu yorum bölümünden ziyade beklenen sonuçla kendi sorusunu hak eden bir şeye benziyor.
RickN

96

Bunu dene:

$data = json_decode($your_json_string, TRUE);

ikinci parametre kodu çözülmüş json dizesini ilişkilendirilebilir diziler haline getirecektir.


30

Eğer formdan JSON dizesi alıyorsanız kullanarak $_REQUEST, $_GETya $_POSTsen işlevini kullanmanız gerekecektir html_entity_decode(). Bunu var_dump, istekte olana karşı kopyaladığım ve echoifade ettiğim şeyden bir tanesini yapana ve istek dizesinin çok daha büyük olduğunu fark edene kadar fark etmemiştim.

Doğru yol:

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

Hatalı:

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

2
Mükemmel, bu işe yarıyor. $ _POST işlevinden json_last_error () = JSON_ERROR_SYNTAX'a veri aldığımda. ama her zaman iyiydi. Ascii veya utf8 gibi kod çözme hatası değil kod çözme hatasıydı. TEŞEKKÜRLER

11

json_decode($json_string, TRUE)JSON nesnesini bir diziye dönüştürmek için işlevi kullanın .

Misal:

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

$my_array_data = json_decode($json_string, TRUE);

NOT: İkinci parametre, kodu çözülmüş JSON dizesini ilişkilendirilebilir diziye dönüştürür.

===========

Çıktı:

var_dump($my_array_data);

array(5) {

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

6

URL kullanarak json dizesi alıyorsanız file_get_contents, aşağıdaki adımları izleyin:

$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

dizeniz aşağıdaki formatta olmalıdır:

$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);

Çıktı:

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

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

        )

)

2

Json Nesnesini Array & String'e dönüştürebilirsiniz.

$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 dosyasını veya yapılarını tüm iç içe geçme düzeyleriyle birlikte PHP tarzı dizilere dönüştürmeniz gerekirse, bu işlevi kullanabilirsiniz. İlk önce json_decode ($ yourJSONdata) ve sonra onu bu işleve geçirmelisiniz. Tarayıcı pencerenize (veya konsolunuza) doğru PHP biçimli dizileri çıkarır.

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);

?>

bence bu İşe yaramalı, sadece Anahtarlar da rakam değilse çift tırnak içinde olmalıdır.


1

bu benim çözümüm: 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}]"

bu yüzden json_decode'u iki kez kullanıyorum:

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

var_dump($js_column_validation);

ve sonuç:

 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 }

Teşekkürler kardeşim ... günümü kurtardın
Nuwan Withanage

1

Dizenin aşağıdaki JSON biçiminde olduğundan emin olun, bu da şuna benzer:

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

Değilse, "responsetype => json"istek parametrelerinize ekleyebilirsiniz .

Sonra json_decode($response,true)onu bir diziye dönüştürmek için kullanın .


1
StackOverflow'a hoş geldiniz :-) Topluluk, ona katkıda bulunmak isteyen yeni üyelerden her zaman mutlu olur ve tavrınızı takdir eder. Ne yazık ki başka bir üye cevabınızın olumsuz oyu hak ettiğini düşündü. Bunun nedeni sorunun kendisi yaklaşık yedi yıl önce sorulmuş ve birkaç kez yanıtlanmış olabilir. Ayrıca responseTypeözellik, isteğe verilen yanıttaki verilerin türünü belirlemek için kullanılır. Yine de sorun, istek gövdesinin kendi başına doğru olmayan veriler içermesidir. Cevabınız bu nedenle verilen bağlama uymuyor.
Philipp Maurer

1

Bir dizeyi aşağıdaki gibi JSON olarak değiştirebilir ve ayrıca isterseniz dize üzerinde kırpabilir, şeritte şerit yapabilirsiniz,

$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

Bu dönüştürücüyü kullanın, hiç başarısız olmaz: 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
Bu kod soruyu yanıtlayabilirken, bu kodun soruyu neden ve / veya nasıl yanıtladığına ilişkin ek bağlam sağlamak, uzun vadeli değerini artırır.
rollstuhlfahrer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.