0

私はjsonにかなり慣れていませんが、json_decodeに問題があります。理由はわかっていると思いますが、修正方法がわかりません。

基本的に、私はjson情報を提供するURLを持っています。cURLを使用して取得し、PHP変数として返しますが、これは問題なく機能しています。必要なすべての情報をprint_rで出力できます。ただし、json_decode($ json、true)を使用すると、NULLが返されます。

技術的には、返されるのは文字列ではなく、オブジェクトのようなものであり、そのオブジェクトのコンテンツを取得する方法を分類できないためだと思います。

たとえば、jsonのものをphp変数として返す場合:

print_r($json);

返される出力は次のようになります(巨大であるため、正確には行いません。単純にするためにレイアウトを示します)

MyThing.returnedItems({MyThing.returnedItems({
"projects":[{
    "completed":"2010-12-21",
    "status":"finished",
    "favorited":0,
    "started":"2010-12-20",
    "percentage":78,
    "permalink":"slug to post",
    "size":"One size",
    "thumbnail":{"src":"full path to full size image",
                 "medium":"full path to thumbnail"},
    "name":"Some title here",
    "notes":"description here",
    "url":"URL to page",
    "comments":0},

つまり、ネストされた配列のようなものであることがわかります。私はそれを気にしませんが、PHP変数としてこれらの配列のすべてのキー/値ペアにアクセスできるようにしたいと思います。しかし、それを囲む「MyThing.returnedItems()」のせいで、デコードする文字列とは見なされないため、毎回NULL値を取得します。

誰かが私がここで欠けているものを知っていますか?そこにあるものを取得する方法を理解したら、それはわかったと思います(単純なforeachか、必要に応じて残りの変数を取得しないもの)が、そこに入ることができないようです。

4

2 に答える 2

2

これは有効なJSONです

{
"item1": [
    {
        "something": [],
        "something else": "some value"
    }
],
"another fun thing": [
    {
        "more fun": "fun value 1",
        "even more!": "fun value 2"
    }
],
"item2": {
    "another thing": "another value"
}
}

これではありません!

 MyThing.returnedItems({
 "item1":[{"something:[],
           "something else": "some value"},
           "another fun thing": [{"more fun": "fun value 1",
                                  "even more!": "fun value 2"}]
         ],
 "item2":{"another thing": "another value"}
 })

そのjavascriptメソッド呼び出し

于 2012-07-24T16:52:48.777 に答える
0

さて、私はあなた方全員が本当に私を助けてくれたことを付け加えたかっただけです。特にMaXは、何が起こっているのかという「公式用語」を知っているので、検索を改善し、最終的に解決策にたどり着く本当に興味深いコードを見つけることができました。しかし、jsonがその奇妙な関数メソッド呼び出しにラップされていた理由を発見しました。サイトがAPIにアクセスするために私に与えたURLには実際にその呼び出しが含まれていたため、ラップされて返されました。言い換えれば、私が持っていたjsonファイルのURLは次のようでした:

somesite.com/apicall.json?key=1234567890&callback=MyThing&version=0...

そのため、その「コールバック」セクションを削除するとすぐに、BAM jsonはラップされなくなり、foreach関数のまったく新しい世界が開かれました。ですから、解決策は私の側では本当にばかげた見落としでしたが、今日XDで計画していなかった多くのことを学んだので、皆さんの意見に感謝したいと思います。

ああ、実際に機能するようになったコード(json_decodeがまだNULLを返していたため、URLのコールバック部分を削除した後)は次のとおりです。

$data = json_decode(file_get_contents($json), true);
print_r($data); // array of everything available for me to mess with!

皆さん、ありがとうございました:)本当に感謝しています!

于 2012-07-24T18:55:09.717 に答える