Java 如何从参数具有空格字符的json中提取数据

Java 如何从参数具有空格字符的json中提取数据,java,json,jayway,Java,Json,Jayway,我有json [ { "name": "Name1", "address": "City1\nCountry1" }, { "name": "Name2", "address": "City2 Country2" } ] 我正在使用jayway库使用“地址”提取“名称”。我想使用jpath

我有json

[
  {
    "name": "Name1",
    "address": "City1\nCountry1"
  },
  {
    "name": "Name2",
    "address": "City2 Country2"
  }
]
我正在使用jayway库使用“地址”提取“名称”。我想使用jpath参数化“地址”

$.*[?(@.address=='{address}')].name
但是,正如您在json中看到的,第一个地址上有“\n”。有没有一种方法像规范化它的间距,所以每当我使用jpath

$.*[?(@.address=='City1 Country1')].name

值仍将被提取

稍微晚一点,一种可能的JSON路径解决方案是对这两个部分使用contains运算符:

$..[?(@.address contains 'City1' && @.address contains 'Country1')].name
但是,这与
=
比较不同,理论上可能产生误报

另一个选项是使用正则表达式过滤器
=~
。使用它可以让你完全控制和只匹配你想要的;由于您有一个换行符,我们需要内联以使
*
匹配包括换行符在内的任何字符

$..[?(@.address =~ /(?s)City1.*Country1/i)].name

稍晚一点,一个可能的JSON路径解决方案是对这两个部分使用contains操作符:

$..[?(@.address contains 'City1' && @.address contains 'Country1')].name
但是,这与
=
比较不同,理论上可能产生误报

另一个选项是使用正则表达式过滤器
=~
。使用它可以让你完全控制和只匹配你想要的;由于您有一个换行符,我们需要内联以使
*
匹配包括换行符在内的任何字符

$..[?(@.address =~ /(?s)City1.*Country1/i)].name

我不确定您是如何从文件或API中读取的。将JSON转换为字符串(如果尚未转换为字符串),然后将所有\n替换为空格“”。如果您可以发布您尝试过的示例代码,那么我们可以建议一些方法供您评论。这就是我现在正在做的工作,从API响应->转换为字符串->响应。替换(“\\n”,”)。然而,我很好奇我们是否有像selenium xpath locator这样的解决方案,它使用“normalize-space()”,我希望答案提供了一些见解。我不确定您是如何阅读文件或API的。将JSON转换为字符串(如果尚未转换为字符串),然后将所有\n替换为空格“”。如果您可以发布您尝试过的示例代码,那么我们可以建议一些方法供您评论。这就是我现在正在做的工作,从API响应->转换为字符串->响应。替换(“\\n”,”)。然而,我很好奇我们是否有像selenium xpath定位器这样的解决方案,它使用“normalize-space()”,我希望答案能提供一些见解。