Json:
{
"im:rating": {
"label": "1"
}
}
试图在Groovy中使用Jsonpath时 如果我正在使用此'$。im:rating'
它显示以下错误
Caused by: com.nebhale.jsonpath.InvalidJsonPathExpressionException: Illegal
字符'PathCharacter [types = [],value = :, position = 4]' $ .im:评级 ---- ^ 非法字符“ PathCharacter [types = [SIMPLE_NAME_CHARACTER,LETTER,COMPLEX_NAME_CHARACTER],value = r,position = 5]” $ .im:评级 ----- ^ 非法字符“ PathCharacter [types = [SIMPLE_NAME_CHARACTER,LETTER,COMPLEX_NAME_CHARACTER],值= a,位置= 6]” $ .im:评级 ------ ^ 非法字符“ PathCharacter [types = [SIMPLE_NAME_CHARACTER,LETTER,COMPLEX_NAME_CHARACTER],值= t,位置= 7]” $ .im:评级 ------- ^ 非法字符“ PathCharacter [types = [SIMPLE_NAME_CHARACTER,LETTER,COMPLEX_NAME_CHARACTER],value = i,position = 8]” $ .im:评级 -------- ^ 非法字符“ PathCharacter [types = [SIMPLE_NAME_CHARACTER,LETTER,COMPLEX_NAME_CHARACTER],value = n,position = 9]” $ .im:评级 --------- ^ 非法字符'PathCharacter [types = [SIMPLE_NAME_CHARACTER,LETTER,COMPLEX_NAME_CHARACTER],值= g,位置= 10]' $ .im:评级 ---------- ^
at com.nebhale.jsonpath.JsonPath.compile(JsonPath.java:85) at com.nebhale.jsonpath.JsonPath.read(JsonPath.java:182)
答案 0 :(得分:1)
我假设您在以下位置使用JsonPath库:
https://github.com/nebhale/JsonPath
通常,在堆栈溢出时,如果不发布正确的代码示例且未引用您使用的确切库(包括版本),则是一种不好的形式。没有这些信息,社区就只能由您自己猜测和研究。
话虽如此,我认为这是特定JsonPath库的限制,据我了解,在这种特定情况下,它不遵守json规范。
以下代码:
@Grab('com.nebhale.jsonpath:jsonpath:1.2')
import com.nebhale.jsonpath.*
def path = JsonPath.compile('$.im:rating')
运行时,将导致您描述的错误。
如果我们改为尝试使用内置的常规JsonSlurper
:
import groovy.json.*
def json = '''\
{
"im:rating": {
"label": "1"
}
}'''
def parsed = new JsonSlurper().parseText(json)
println "value: ${parsed['im:rating']}"
我们得到:
~> groovy use_slurper_instead.groovy
value: [label:1]
即使用其中带有:
个字符的键没有问题。我会提出有关JsonPath的问题。
答案 1 :(得分:0)
我们可以使用以下替代方法
'$ .. label'
答案 2 :(得分:0)
$['im:rating']
在父对象中选择指定的属性。确保在属性名称两边加上单引号。 提示:如果属性名称包含特殊字符(例如空格)或以A..Za..z_以外的其他字符开头,则使用此表示法。 https://support.smartbear.com/alertsite/docs/monitors/api/endpoint/jsonpath.html