我正在使用JSON,遇到了一些问题。
我想在JSON对象中插入/更新一个路径。如果路径不存在,它将被创建,然后我插入一个新值。如果它退出,它将被一个新值更新
例如,我想像这样添加新路径:
val doc = JsonPath.parse(jsonString)
doc.add("$.user.name", "John")
字符串
但我总是得到这个错误,因为路径不存在:
class com.jayway.jsonpath.PathNotFoundException:路径$“user”中缺少属性]
因此,我想创建一个新的路径,如果它不存在。
这是我的代码,但jsonString
没有改变:
var jsonString = "{}" val conf = Configuration.defaultConfiguration().addOptions(Option.DEFAULT_PATH_LEAF_TO_NULL).addOptions(Option.SUPPRESS_EXCEPTIONS)
JsonPath.using(conf).parse(jsonString).set(JsonPath.compile("$.user.name"), "John")
Log.d("TAG", "new json = $jsonString")
型
请给我给予。非常感谢!!
4条答案
按热度按时间4nkexdtk1#
我尝试了三种不同的JSON库,它们都支持JsonPath/JsonPointer(Jackson,JsonPath和JSON-P),但在缺少父节点的情况下,它们都无法重建JSON对象层次结构。因此,我提出了自己的解决方案,使用Jackson/JsonPointer向JSON对象添加新值,因为它允许在JsonPointer部分中导航。
字符串
使用方法:
型
这将生成并打印以下JSON对象:
型
当然,这并不能涵盖所有的角落情况下,但在大多数情况下工作。希望这有助于别人。
rta7y2nd2#
要创建一个新节点,请尝试在JsonPath.parse(jsonString)的结果实现的WriteContext接口上使用put(path,key,object)。
cfh9epnr3#
你可以这样做:
字符串
ogsagwnx4#
Put将帮助您添加或更新密钥:
字符串