我有这个json:
{
"push": {
"changes": [
{
"commits": [
{
"hash": "b194ab92186b94de3f9493818c353e9bbedb38d4"
}
]
}
]
}
}
而且,我有以下 jq,代码可以正常工作
cbongiorno at 5cg6203867 in ~/dev/sterling/pipeaas on master [+!?]
$ jq -re '.push.changes[].commits[].hash ' push.json # golden hash
b194ab92186b94de3f9493818c353e9bbedb38d4
这产生了我想要的东西。
我现在尝试使用等效的 JSONPath,这就是它变得奇怪的地方:如果我在这里尝试,我得到和数组大小为 1 和我的哈希:
$.push.changes[*].commits[*].hash
[
"b194ab92186b94de3f9493818c353e9bbedb38d4"
]
所以,产生和数组,然后我可以索引该数组,对吗?:
$.push.changes[*].commits[*].hash[0]
[
"b"
]
我收到了这封信b
- 所以现在它将字符串视为字符数组。
所以,也许这是一个实施问题。我在 groovy 中尝试了相同的路径表达式,但我得到了一些不同的东西:
在 jsonpath.groovy
@Grab(group = 'com.jayway.jsonpath', module = 'json-path', version = '2.4.0')
import com.jayway.jsonpath.*
stuff = JsonPath.parse(new File('push.json')).read('$.push.changes[*].commits[*].hash')
println(stuff)
$ groovy jsonpath.groovy
[b194ab92186b94de3f9493818c353e9bbedb38d4]
好的,我们又得到了我们的数组。现在,让我们得到 1 个元素:
@Grab(group = 'com.jayway.jsonpath', module = 'json-path', version = '2.4.0')
import com.jayway.jsonpath.*
stuff = JsonPath.parse(new File('push.json')).read('$.push.changes[*].commits[*].hash[0]')
println(stuff)
$ groovy jsonpath.groovy
[]
所以现在,就好像数组什么都没有?!
那么,如何将这个单个数组项作为路径表达式?