锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / jsoncpp开源 / jsoncpp解析对象时LogicError非法操作
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

jsoncpp解析对象时LogicError非法操作


背景


在构造json输出时,遇到复杂的关系,这时候遇到了LogicError非法操作。报错的函数是:

JSONCPP_NORETURN void throwLogicError(JSONCPP_STRING const& msg) {
  throw LogicError(msg);
}

在网上搜索英文页面,找到了本文。如果是生成json时,遇到LogicError非法操作,请点击“jsoncpp的LogicError非法操作”。而本文是关注于解析时遇到LogicError非法操作。


翻译

I have a Json string as below and I need to parse them with jsoncpp library of C++; however, even if I try to parse status_code which is the simplest key, I get logicerror. My code to parse json is like this:我有一个Json字符串如下所示,我需要使用C ++的jsoncpp库解析它们; 但是,即使我尝试解析最简单的key_code,我也会遇到逻辑错误。我解析json的代码是这样的:

Json::Value root = js;
const Json::Value status_code = root["status_code"];

where js is a std::string. I print the root and the results seems normal, but the the second line of code always gives error. Also, I tried Json::Value::get method and nothing changed.其中js是std :: string。我打印根,结果似乎正常,但第二行代码总是出错。此外,我尝试了Json :: Value :: get方法,没有任何改变。

{
  "status_code": "OK",
  "status_msg": "All images in request have completed successfully. ",
  "meta": {
    "tag": {
      "timestamp": 1457008532.462851,
      "model": "general-v1.3",
      "config": "34fb1111b4d5f67cf1b8665ebc603704"
    }
  },
  "results": [
    {
      "docid": 161641131401527616156105737996754786562,
      "status_code": "OK",
      "status_msg": "OK",
      "local_id": "",
      "result": {
        "tag": {
          "concept_ids": [
            "ai_786Zr311",
            "ai_pPxqdnP5",
            "ai_Pf2b7clG",
            "ai_c9n7SB25",
            "ai_WTrlNkqM",
            "ai_ggQlMG6W",
            "ai_62K34TR4",
            "ai_hf5ZBGcK",
            "ai_9c0Hmcx0",
            "ai_6lhccv44",
            "ai_pCnxWJZh",
            "ai_bmls4LpL",
            "ai_TkWkj1sX",
            "ai_rsX6XWc2",
            "ai_x3vjxJsW",
            "ai_4Qjv5PTH",
            "ai_lrTHSPdB",
            "ai_bBXFkGB1",
            "ai_xxnGcd42",
            "ai_PpTcwbdQ"
          ],
          "classes": [
            "no person",
            "room",
            "indoors",
            "furniture",
            "vehicle",
            "industry",
            "technology",
            "production",
            "exhibition",
            "business",
            "contemporary",
"group",
            "container",
            "building",
            "home",
            "modern",
            "action",
            "auto racing",
            "seat",
            "computer"
          ],
          "probs": [
            0.9784166812896729,
            0.9754077196121216,
            0.974927544593811,
            0.9747141003608704,
            0.9636767506599426,
            0.954016923904419,
            0.9406172633171082,
            0.9292353391647339,
            0.9243901968002319,
            0.911110520362854,
            0.8961678147315979,
            0.8841571807861328,
            0.8797860145568848,
            0.8792335987091064,
           0.869953989982605,
            0.8654355406761169,
            0.8574825525283813,
            0.8546661734580994,
            0.8530611991882324,
            0.8511127829551697
          ]
        }
      },
      "docid_str": "799af313d0500ce2648b9a4e20c49902"
    }
  ]
}            

回答

I solved my own problem by using Json::Reader. I'm posting the code to help others who will face this problem. I'm getting the "classes" tag with the code snippet below:

我通过使用Json::Reader解决了我自己的问题。我发布的代码是为了帮助那些将面临这个问题的人。

我正在使用下面的代码段获取“classes”标记:

Json::Value root;
Json::Reader reader;
reader.parse(js,root);//解析后放到root对象里,注意参数的使用
const Json::Value classes = root["results"][0]["result"]["tag"]["classes"];//注意[0]是数组关系,[""]是属性关系,属性是子,
//[]前面是父
友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内