2

freebase APIにリクエストを送信しましたが、クエリは次のとおりです。

{
  "id" : "/m/01f8mn",
  "key" : [{
    "namespace" : "/wikipedia/en_id",
    "value" : null
  }],
  "key" : [{
    "namespace" : "/authority/mobygames/game",
    "value" : null
  }]  
}​

そして私はFreebaseから答えを得ました:

{
  "code":          "/api/status/ok",
  "result": {
    "id": "/m/01f8mn",
    "key": [{
      "namespace": "/wikipedia/en_id",
      "value":     "213502"
    }],
    "ns0:key": [{
      "namespace": "/authority/mobygames/game",
      "value":     "prince-of-persia"
    }],
    "ns1:key": [{
      "namespace": "/authority/giantbomb/game",
      "value":     "61-2561"
    }]
  },
  "status":        "200 OK",
  "transaction_id": "cache;cache03.p01.sjc1:8101;2012-05-20T18:37:04Z;0060"
}

お気づきのように、結果には「名前空間プレフィックス」キーが含まれています( "ns0:key"、 "ns1:key")

問題は、Javascriptオブジェクトでこれをどのように処理できるかということです。誰か助けてもらえますか?

4

3 に答える 3

4

名前に特殊文字が含まれるプロパティにアクセスする場合は、連想配列プロパティと同じようにアクセスします。

yourObject.result["ns0:key"]

名前空間と値のプロパティは、配列の最初のインデックスであるオブジェクト内に格納されるため、名前空間と値にアクセスするには、次の構文を使用します。

yourObject.result["ns0:key"][0].namespace
yourObject.result["ns0:key"][0].value       // contains "prince-of-persia"

yourObject.result["ns1:key"][0].namespace
yourObject.result["ns1:key"][0].value       // contains "61-2561"
于 2012-05-20T19:45:35.463 に答える
2

最初のクエリは有効な JSON ではありません (2 つの「キー」キーが互いに上書きされます)。そのため、仲介ソフトウェア レイヤーが関与していると思われます (おそらく、Freebase のクエリ エディター?)。

接頭辞 (実際には名前空間ではありません) を制御できると便利な場合は、自分に合ったものを自分で作成できます。"key" と "other:key" など、自分に合ったスキームを使用してください。|= 演算子を使用してクエリを書き直すこともできるため、1 つのキー句で両方の名前空間を指定できます (例: "key":[{"namespace|=" :[ns1,ns2]}])。

于 2012-05-21T04:01:46.460 に答える
0
for ( key in freebaseResult.result ) {
  var i, resultArray = freebaseResult.result[key];

  for ( i = 0; i < resultArray.length; i++ ) {
    alert( resultArray[i].namespace + ": " + resultArray[i].value );
  }
}
于 2012-05-20T19:49:21.627 に答える