我在以下结构中使用JSON输出字符串。
{
"Results": [
{ "Result": 5756 },
{ "Result": 5234 },
{ "Result": 5432 }
]
}
由此,我想访问“Results”数组的每个元素(逐个 - 5756,5234,5432)。
为了读取/提取元素,我使用“ XPath ”。我尝试了很多XPath,但到目前为止没有运气;以下几个。
当使用 // * [1] 时,它会提供如下的整个JSON字符串。
[
{ "Result": 5756 },
{ "Result": 5234 },
{ "Result": 5432 }
]
你能帮我解决一下我面临的问题吗? 要么 如果需要更改JSON的结构,建议我使用新的结构和XPath来访问数组元素,例如,我们将不胜感激。
非常感谢提前。
答案 0 :(得分:1)
以下是使用jsonpath gem(http://rubygems.org/gems/jsonpath)在Ruby中执行此操作的示例:
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
答案 1 :(得分:0)
@Popeye - 我最近发布了一个JS lib的第一个版本,它完全符合您的要求; DefiantJS(http://defiantjs.com)
使用此lib,您可以使用fullscale 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]