2013-12-10 4 views
3

У меня есть выходная строка JSON в следующей структуре.XPath для чтения элементов массива из строки JSON

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

Исходя из этого, я хочу, чтобы получить доступ к каждому элементу (по одному - 5756, 5234, 5432) из ​​массива «Результаты».

Чтобы прочитать/извлечь элемент, я использую «XPath». Я пробовал много XPaths, но до сих пор не повезло; Ниже приведены некоторые из них.

  1. //*[1].Result - Invalid XPATH
  2. //*[1].Result[0] - Invalid XPATH
  3. // * [1]/Результат [0] - NULL
  4. // * [1]/Результат - NULL

И когда используется // * [1] Это дает всю строку JSON следующим образом.

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

Не могли бы вы помочь мне решить проблему, с которой я столкнулся? Или В случае, если структура JSON требуется изменить, предложите мне новую структуру вместе с XPath для доступа к элементу массива, пример будет оценен.

Большое спасибо заранее.

+1

Назовите меня сумасшедшим, но не XPath ограничивается анализом XML-документов? – Phil

+0

Вы также можете использовать XPath для анализа JSON. http://goessner.net/articles/JsonPath/ проверьте это. – Popeye

+1

Это не XPath, это JSONPath – Phil

ответ

1

Вот пример того, как вы можете это сделать в Ruby, используя jsonpath камень (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 
0

@Popeye - Я недавно выпустила первую версию Lib JS, которая делает именно то, что вы находясь в поиске; DefiantJS (http://defiantjs.com)

С помощью этой библиотеки вы можете запросить любую структуру JSON с полномасштабным синтаксисом XPath. Вы можете также использовать XPath оценщик, чтобы проверить/проверить XPath выражения мгновенно здесь:

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

Как для примера, при условии, что ваши данные результат так просто, как вы examplified, я хотел бы предложить JSON структуру, подобную это:

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

и используя оценщик XPath (и увидеть консоль в вашем браузере для подсказок), вы можете извлечь выборы, которые вы хотите с этим XPath:

var sel = Defiant.search(res, '//Results'); 
// sel contains the array -> [5276, 5234, 5432] 
Смежные вопросы