2

私はJavascriptを初めて使用し、オブジェクトに格納されているテキストを抽出しようとしています。

オブジェクトはオブジェクトリテラルとして定義され、関数を呼び出すJavascriptスクリプトの関数に渡されます。スクリプト(およびオブジェクト)の構造は次のとおりです。

foo({
  "query": {
  "count": "2",
  "created": "2009-07-25T08:17:54Z",
  "lang": "en-US",
  },
  "results": {
   "result": [
    {
     "abstract": "<b>Pizza</b> Hut®. Order Online for Delivery or Carry-out. Fast &amp; Easy.",
     "title": "<b>Pizza</b> Hut"
    },
    {
     "abstract": "Official site of Domino's <b>Pizza</b> delivery chain, which offers thin crust, deep dish, and hand tossed <b>pizzas</b> with a variety of side items and beverages. Site <b>...</b>",
     "title": "Domino's <b>Pizza</b>"
    }
   ]
  }
 }
});

オブジェクトは「foo」という名前のコールバック関数に渡されます。

function foo(o){
  var out = document.getElementById('container');
  out.innerHTML = o.query.count;
}

私の問題:上記のコールバック関数を使用してクエリカウント変数を出力する方法は知っていますが、結果配列の最初の結果のタイトルを出力する方法がわかりません。

最初の結果タイトルを表示するようにコールバック関数を変更するにはどうすればよいですか?また、すべての結果からすべてのタイトルを印刷できるforeachステートメントはありますか?

ありがとう!

更新:このコードのJSBINは次の場所にあります: http: //jsbin.com/ejiwa/edit

4

4 に答える 4

4

次の動作をしますか?

o.results.result[0].title

最初の結果タイトルを取得するには?そして、すべての結果を繰り返すには:

for (var i=0; i<o.results.result.length; i++) {
    var result = o.results.result[i];
    alert(result.title);
}

編集:あなたはそれを正しくコピーしましたか?これが私がRhinoで得たものです:

js> o = {
  "query": {
  "count": "2",
  "created": "2009-07-25T08:17:54Z",
  "lang": "en-US",
  },
  "results": {
   "result": [
    {
     "abstract": "<b>Pizza</b> Hutr. Order Online for Delivery or Carry-out. Fast &amp; Easy.",
     "title": "<b>Pizza</b> Hut"
    },
    {
     "abstract": "Official site of Domino's <b>Pizza</b> delivery chain, which offers thin crust, deep dish, and hand tossed <b>pizzas</b> with a variety of side items and beverages. Site <b>...</b>",
     "title": "Domino's <b>Pizza</b>"
    }
   ]
  }
 }

js> o.results.result[0].title
<b>Pizza</b> Hut
于 2009-07-25T20:30:32.333 に答える
1

JSONからわかるように、オブジェクトには、オブジェクトの配列である「result」というプロパティを含む「results」というプロパティがあります。

その最初のものを表示するには、すでにcountで行ったように単純に行いますが、代わりにタイトルの構造に従ってください。

o.query.results.result[0].title

各結果をループするには、次のように、配列のように結果プロパティをループするだけです。

var results = o.query.results.result;
for(var i = 0; i < results.length; i++) {

}

JSONは単なるJavaScriptコードです。JSONスニペットをJavaScriptオブジェクト宣言と考えれば、問題なく理解できるはずです。

于 2009-07-25T20:30:52.163 に答える
1

コールバック関数のoパラメーターが何であるかわかりません。私は通常、XMLHttpRequestまたはActiveXObjectをグローバル変数reqに割り当てます。

次に、コールバックを使用します。

 function json_callback() {
    if (req.readyState == 4) {
            if (req.status == 200) {
                    jsonObj = eval("(" + req.responseText + ")");
                    var out = document.getElementById('container');
                    out.innerHTML = jsonObj.query.count;
            }
       }
 }

サーバーとサーバーがクライアントに送信しているデータを完全に信頼している場合にのみ、eval()を使用する必要があることに注意してください。実際にはeval()よりも高速で、JSONのみに制限されているためより安全なJSONパーサーが利用可能ですが、eval()はすべてのJavaScriptを解析して実行できるため、セキュリティ上のリスクがあります。ECMAScriptの次のバージョンでは、標準のJSONパーサーが組み込まれる予定です。

于 2009-07-25T20:33:57.663 に答える
1

実際のオブジェクトは、あなたが書いたものとは少し異なる構造を持っています。results実際にはの要素ですquery。だからこれを試してみてください:

o.query.results.result[0].title
于 2009-07-25T20:38:13.317 に答える