【问题标题】:Disallow single quoted values in JSON不允许 JSON 中的单引号值
【发布时间】:2020-06-24 18:00:08
【问题描述】:

我正在解析一个 Json 文件,该文件应根据 json 的正式规范进行格式化,其中不包括将键和值包含在单引号 (') 中的可能性。但是,使用org.jsongson,实现将接受这些条目并成功地将文件转换为JsonObject。我需要它失败(我的流程中有第二个验证不允许单引号)。

我一直在研究如何配置解析器以使其失败。我读过JacksonJsonParser 默认情况下不允许这样做,然后有可能显式更改它。我可以对前面提到的库之一做同样的事情,还是应该改用Jackson

谢谢!

【问题讨论】:

  • 为什么不使用杰克逊?
  • 我试图避免向该项目添加更多依赖项。老实说,org.jsongsonJackson 更可取,因为它已经被另一个模块使用了。
  • 如果您已经转换为 JSON 对象,那么为什么引号是什么重要,因为它们不再存在于数据中?
  • @Deadron 问题已经说明了原因:“我需要它失败(我的流程中有第二个验证不允许单引号)。” --- OP 希望在无效 JSON 上早日失败。
  • @Andreas 我相信您知道并非每个人都能提出完美的问题。它也很重要,因为并非所有 JSON 解析器都会预先解析整个对象。如果他正在尝试验证 JSON 与解析其重要的是要知道。

标签: java json jackson gson


【解决方案1】:

org.json 是开源的,因此您可以构建一个不允许单引号字符串文字的修改版本。

JSONTokener类中,修改nextValue()方法。

public Object nextValue() throws JSONException {
    char c = this.nextClean();
    String string;

    switch (c) {
    case '"':
    case '\'': // ← ← ← ← ← ← ← ← ← ← ← ← REMOVE OR COMMENT THIS LINE
        return this.nextString(c);
    case '{':
        this.back();
        return new JSONObject(this);
    case '[':
        this.back();
        return new JSONArray(this);
    }
    
    ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 2011-04-29
    • 1970-01-01
    • 2021-07-02
    • 2010-09-21
    • 1970-01-01
    相关资源
    最近更新 更多