3

次の構造に JSON 出力文字列があります。

{
    "Results": [
        { "Result": 5756 },
        { "Result": 5234 },
        { "Result": 5432 }
    ]
}

これから、「Results」配列の各要素 (1 つずつ – 5756、5234、5432) にアクセスしたいと思います。

要素を読み取り/抽出するために、「<strong>XPath」を使用しています。私は多くの XPath を試しましたが、これまでのところうまくいきませんでした。以下はその一部です。

  1. //*[1].Result -- 無効な xPath
  2. //*[1].Result[0] -- 無効な xPath
  3. //*[1]/結果[0] -- NULL
  4. //*[1]/結果 -- NULL

//*[1]を使用する と、JSON 文字列全体が次のようになります。

[
    { "Result": 5756 },
    { "Result": 5234 },
    { "Result": 5432 }
]

私が直面している問題を解決するために私を助けてくれませんか? または、JSON の構造を変更する必要がある場合は、配列要素にアクセスするための XPath と共に新しい構造を提案してください。例をいただければ幸いです。

よろしくお願いします。

4

2 に答える 2

2

Ruby で jsonpath gem ( http://rubygems.org/gems/jsonpath )を使用してそれを行う方法の例を次に示します。

requre 'json'
require 'jsonpath'

# I initialize the data inline here, but you can read it from file
data = <<-EOS
{
  "Results": [
    { "Result": 5756 },
    { "Result": 5234 },
    { "Result": 5432 }
   ]
}
EOS

json_data = JSON.parse(data)

# First value:
JsonPath.new("$.Results[0].Result").on(json_data) # => 5756

# Second value:
JsonPath.new("$.Results[1].Result").on(json_data) # => 5234

# Third value:
JsonPath.new("$.Results[2].Result").on(json_data) # => 5432
于 2013-12-11T07:38:41.393 に答える
2

@Popeye - 私は最近、まさにあなたが探しているものを実行する JS lib の最初のバージョンをリリースしました。DefiantJS ( http://defiantjs.com )

このライブラリを使用すると、フルスケールの XPath 構文を使用して任意の JSON 構造をクエリできます。XPath エバリュエーターを使用して、XPath 式をすぐにテスト/検証することもできます。

http://www.defiantjs.com/#xpath_evaluator

あなたの例については、結果データがあなたが例示したのと同じくらい単純であると仮定すると、次のような JSON 構造をお勧めします。

var res = {
    "Results": [
          5756,
          5234,
          5432
    ]
}

そして、XPath エバリュエーターを使用して (ヒントについてはブラウザーのコンソールを参照してください)、次の XPath で必要な選択を抽出できます。

var sel = Defiant.search(res, '//Results');
// sel contains the array -> [5276, 5234, 5432]
于 2014-01-03T11:46:46.760 に答える