如何在jsonpath中转义特殊字符冒号(':')

时间:2018-11-14 06:27:12

标签: json parsing groovy jsonpath jsonparser

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)

3 个答案:

答案 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