【问题标题】:How to identify duplicate keys when parsing a json object with json-cpp?使用 json-cpp 解析 json 对象时如何识别重复键?
【发布时间】:2015-01-08 12:48:45
【问题描述】:

我正在尝试解析从文件中读取的 json 对象。 我想识别重复的键,因为 json-cpp 不喜欢它们(即使它们在 json 中不是非法的)。

我需要能够说:错误:您的 json 文件有重复的键,我们不喜欢这样。

Json::Reader reader(Json::Features::strictMode());

在 strictMode 中使用 reader 并不能解决问题。

【问题讨论】:

    标签: json jsoncpp


    【解决方案1】:

    设置

    rejectDupKeys
    

    void Json::CharReaderBuilder::setDefaults   (   Json::Value *   settings    )
    

    JsonCPP Doc

    【讨论】:

      【解决方案2】:

      没有开箱即用的方法,但您可以对该功能进行编程。 由于JsonCPP 使用映射来存储对象键,因此您必须添加一些代码:

      Value &Value::resolveReference(const char *key, bool isStatic)
      

      首先,您必须确保您正在解析(而不是访问某些 Json::Value)。然后,您必须在此 if 中添加一些内容(例如异常或标志):

      if (it != value_.map_->end() && (*it).first == actualKey)
      {
          // key is already present: if parsing, throw!
          return (*it).second;
      }
      

      【讨论】:

        【解决方案3】:

        Open an issue。这可以很容易地添加。 (Sga 的想法可能是最好的方法。)我们最近做了很多工作,以便在保持二进制兼容性的同时更容易添加功能。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多