2012-02-03 10 views
1

サードパーティのAPIからJSON文字列を取得しています。 json_decode($ json、true)を使用して配列に格納すると、ネストされた配列になります。それは私にはそうであってはならないようです。これが正しい行動であるかどうか誰かが説明できますか?json_decodeはネストされた配列を返しますか?

$obj = getStatus('100000043'); 
var_dump($obj); 

getStatusはサードパーティAPIを呼び出します。 var_dumpの結果は次のとおり

ストリング(245) "[{" ステータス ":" 処理 " "OrderNum": "87"、 "InvoiceNum": "0"、 "れるPONum":" 100000043 "、" ShippingCost ":" "、" TrackingNum ":" "、ShippingWeight": "" cust_num ":" 123 "、" entryTime ":" 2012-02-02 15:19:05 "、"ブランチ ":" 0" 、 "CustPoNum": "43"、 "brord": "12345"}]」

[OK]を、私は配列にデコード:

$myArray = json_decode($obj, true); 
var_dump($myArray); 

結果です。

アレイ(1){[0] =>アレイ(12){ [ "ステータス"] => ストリング(10) "処理" [ "OrderNum"] => 列(5)」 87686" [ "InvoiceNum"] => 列(1) "0" [ "PaPoNum"] => 列(9) "100000043" [ "ShippingCost"] => 列(0) "" 【 "TrackingNum"] => 列(0) "" [ "ShippingWeight"] => 列(0) "" [ "CUST_NUM"] => 列(5) "64366" [ "entryT (1) "8" ["CustPoNum"] => 文字列(9) "012" ) "100000043" [ "brord"] => 文字列(6) "887686"}}

私は$ myarrayの内にネストされたいアレイ[0] ... はどのようにタイムアウト値を取得します:

$myArray[0]['Status'] 

私は$ myArray ['Status']が動作すると予想しています。

私は誤解していますか、何か間違っているのですか、またはAPIの結果についてファンキーなことがありますか?

+0

あなただけの '$ myarrayの=とそれを回避していないのはなぜ$ myArray [0]; 'ちょっとした提案... –

+0

あなたはどんなドキュメントを参照していますか? – Gumbo

答えて

3

とjsonエンコードされたデータでは、角カッコで始まるコードがある場合は、中括弧を含むデータが含まれます。[{data}]、常にネストされた配列になります。

$myArray[0]['Status']を使用してデータにアクセスするのは簡単です。 また、このよう$myArray$myArray[0]を割り当てることができます。

$myArray = $myArray[0]; 

その後、あなたはこの構文を使用して、配列のすべての要素にアクセスすることができます。

$myArray['Status']; 
+0

ありがとう! jsonと一緒に働くことは私にとっては新しいことです。今私はこのようにアクセスすることはハックではないことを知っている:) –

2

ストリング(245) "[{" ステータス ":" 処理 " "OrderNum": "87"、 "InvoiceNum": "0"、 "れるPONum": "100000043"、 "ShippingCost":" "、" TrackingNum ":" "、" ShippingWeight ":" "、" cust_num ":" 123 "、" entryTime ":" 2012-02-02 15:19:05 "、" branch ":" 0 "、" CustPoNum ":" 43" 、 "brord": "12345"}]」という文字列の最初と最後の文字で

ルック:[]。これは配列のJSON(およびJavascript)構文です。したがって、実際に必要なオブジェクトは、JSON配列の最初の(そして唯一の)メンバーです。したがって、PHPでデコードすると、PHPはJSON構造体を反映し、必要なオブジェクトを配列の最初の(そして唯一の)メンバとして配置します。

2つの選択肢があります。あなたはそれを復号化した後、配列構文で必要なデータを抽出し得ることができる:配列リテラルが存在しないので

$myArray = $myArray[0]; 

また、あなたはsubstrで最初と最後の文字を削除することができます。これは、最初のバージョンよりもはるかに安定していないことに注意してください。

$myArray = json_decode(substr($obj, 1, -1), true); 

なお、この意志ブレークあなたは、複数のオブジェクトが返さ持っているので、それは、リモート可能性があります場合は、それを使用しない場合。

+0

ありがとう!これは多くを助ける –

関連する問題