gson 地面观测系统|提取JSON的根名称|JSON路径或JSON指针

yyhrrdl8  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(165)

我正在寻找一个JSON文档的根元素。看起来使用JsonPointer和JsonPath都不可能,因为我尝试查找这样的表达式失败了。如果有任何提示,我将不胜感激。TIA。
示例文档:

{
    "MESSAGE1_ROOT_INPUT": {
        "CTRL_SEG": "test"
    }
}

下面使用gson 2.9.0:

$.*~

产生:

{"CTRL_SEG": "test"}

JSONPath Online产生以下结果:

[
  "MESSAGE1_ROOT_INPUT"
]

尝试使用JsonPath/JsonPointer表达式获取文本“MESSAGE1_ROOT_INPUT”。请注意,最好使用传统的方法(字符串化json文本上的子字符串或正则表达式)提取此文本。
背景:我们正在构建一个API服务,它接受具有不同根的JSON文档。例如,MESSAGE2_ROOT_INPUT,MESSAGE3_ROOT_INPUT等。在此基础上,消息的路由将进一步发生。
支持/使用的语言:Java/GSON库/正则表达式

rdlzhqv9

rdlzhqv91#

Gson本身并不支持JSONPath或JSON指针,但是,您可以使用JsonReader非常高效地获得第一个属性的名称:

public static String getFirstPropertyName(Reader reader) throws IOException {
    // Don't have to call JsonReader.close(); that would just close the provided reader
    JsonReader jsonReader = new JsonReader(reader);
    jsonReader.beginObject();
    return jsonReader.nextName();
}

但是,有两件事需要记住:

  • 这只读取JSON文档的开头;它既不验证完整的JSON文档是否具有有效的语法,也不检查是否存在更多的顶级属性
  • 这消耗了来自Reader的一些数据;为了进一步处理数据,您必须缓冲数据以便再次读取(您也可以先将JSON存储在String中,然后将StringReader传递给JsonReader

相关问题