java从JSON字符串中的任意位置移除键,而无需反序列化
在不反序列化和重新序列化以下深度嵌套的JSON字符串(如果可能的话)的情况下,如何从任何嵌套级别删除任何名为“REMOVEME”的键
尝试:
不情愿地尝试反序列化到JsonObject
/LinkedHashMap
以在有问题的键上使用node.remove(e.getKey())
遍历结构,但Gson抛出并发修改异常,Jackson需要完全反序列化
之前:
{
"a": {
"REMOVEME" : "unwanted",
"b": {
"REMOVEME" : "unwanted",
"c": {
"d": {
"REMOVEME" : "unwanted",
"something": "default",
"e": {
"f": {
"REMOVEME" : "unwanted",
"g": {
"REMOVEME" : "unwanted",
"h": {
... ,
之后:
{
"a": {
"b": {
"c": {
"d": {
"something": "default",
"e": {
"f": {
"g": {
"h": {
... ,
# 1 楼答案
我不确定您试图从节点删除属性的方式,但可以删除我使用jackson删除的属性
# 2 楼答案
解决这个问题的一种方法是使用Gson进行流式令牌解析。这个方法可以轻松地处理非常大的JSON字符串
前后示例:
基本测试线束:
标记化和过滤魔法:
# 3 楼答案
如果对象的确切值和名称已知,则可以对其执行regex替换,而不使用任何内容,例如:
否则,如果只知道键,仍然可以将其与稍微复杂的表达式匹配:
或者,如果只知道值,则返回
如果它们都是动态的,但您仍然有一个列表,那么您应该能够遍历它们,动态地将每个键/值更改为匹配的键/值