我们可以忽略json解析中的一行吗?

时间:2017-01-18 23:11:26

标签: java json jackson

我从休息服务中获得了以下类型的json,我需要解析它并通过它获取数据。这个json在Json格式方面是无效的,但有没有办法解析这个或忽略一个有逗号的行

{
 "yshan" : "EMP",
    "yuansshi" : "EMP",
    "zacharyb" : "EMP",
    "zholin" : "EMP",
    "fy16interns_bxb" : {,
        "avaderiy" : "EMP",
        "crellis" : "EMP",
    }
}

我的主要目的是获取所有具有值“EMP”的“关键”字段名称,无论它们是嵌套的还是常规的json?

我使用jsonnode和jsonNode.getFields()进行检索。这适用于没有嵌套元素的json,但对于具有嵌套元素的json,它会抛出“意外字符”错误,如

Unexpected character (',' (code 44)): was expecting either valid name character (for unquoted name) or double-quote (for quoted) to start field name

如果你可以帮助我,那将是可观的

2 个答案:

答案 0 :(得分:1)

掉线会导致更糟糕的json。

如果错误始终相同,也许它总是一个大括号后面跟一个逗号,那么你可以试试

  1. 以字符串
  2. 读取json响应
  3. 清理字符串(例如:json.replace("{,", "{")
  4. 解析清理后的字符串。
  5. 当然:只有修复API是不可能的,并且解析了修补过的'回应是有道理的。

答案 1 :(得分:0)

如果您只想提取值为"EMP"的键,则可以使用正则表达式:

"([^"]+)"\s*:\s*"EMP"

作为Java代码,那将是:

Matcher m = Pattern.compile("\"([^\"]+)\"\\s*:\\s*\"EMP\"").matcher(input);
while (m.find()) {
    System.out.println(m.group(1));
}

请参阅regex101