前言

标注数据导出文件是json格式的,也就是python的dict格式,需要读取标注结果,可以使用c++或者python,本文使用c++实现的。

JsonCpp简介

JsonCpp是一种轻量级的数据交换格式,是个跨平台的开源库,可以从githubsourceforge上下载源码。查找资料的过程中发现另一个开源库RapidJson,有时间可以了解一下。

JsonCpp使用

1.安装JsonCpp开源库;

$ sudo apt-get install libjsoncpp-dev

2.根据json文件编辑测试程序读取json数据;

/read_json$ ls
eye_state_20181102_20181106_095415.json read_json.cpp

3.编译调试测试程序;

/read_json$ g++ -o read_json read_json.cpp -ljsoncpp
/read_json$ ./read_json

测试程序

/*
* AMY
* read_json.cpp
* Date: 20181106
*/
#include <iostream>
#include <fstream>
#include <jsoncpp/json/json.h> int main()
{
Json::Reader reader;
Json::Value root;
std::ifstream ifs;
ifs.open("eye_state_20181102_20181106_095415.json", std::ios::binary);
std::string line;
while(std::getline(ifs, line))
{
if(!reader.parse(line, root)) return -;
std::string url_image = root["url_image"].asString();
std::cout << "root.size(): " << root.size() << std::endl;
std::size_t pos = url_image.find("/zrj_close");
std::string image_name = url_image.substr(pos);
std::cout << "image_name: " << image_name << std::endl;
std::cout << "data: " << std::endl;
for(int i=; i<root["result"].size(); i++)
{
Json::Value data = root["result"][i]["data"];
std::cout << "val: " << std::endl;
for(int j=; j<data.size(); j++)
{
int val = data[j].asInt();
std::cout << val << "---" ;
}
std::cout << "\n"; }
line.clear();
}
ifs.close();
return ;
}

问题

1.

fatal error: json/json.h: No such file or directory
compilation terminated.

原因:没有正确安装JsonCpp开源库,或者头文件的路径不匹配。

2.

[%] Linking CXX executable read_json
CMakeFiles/read_json.dir/read_json.cpp.o: In function `main':
read_json.cpp:(.text.startup+0x2a): undefined reference to `Json::Reader::Reader()'
read_json.cpp:(.text.startup+0x34): undefined reference to `Json::Value::Value(Json::ValueType)'

参照here的方法实现的,将源码中的json和lib_json文件夹置于同一目录,使用Cmake编译过程中出现错误,即使添加了JsonCpp的include路径和‘-ljsoncpp’,这个问题暂时还没有解决,改用其他方法(g++直接编译)完成。

CMakeLists.txt

#.cmake verson,指定cmake版本
cmake_minimum_required(VERSION 2.8)
set(CMAKE_CXX_COMPILER "g++")
list(APPEND CMAKE_CXX_FLAGS "-O3 -DNDEBUG -ffast-math -Wall -pthread -fopenmp -std=c++11 -ljsoncpp")
#.project name,指定项目的名称,一般和项目的文件夹名称对应
project(read_json)
SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON) #.head file path,头文件目录
INCLUDE_DIRECTORIES(include; /lib/opencv2413/opencv-2.4.13.4/build/include; /usr/include)
#aux_source_directory("src/include" SOURCES_FILE) #.source directory,源文件目录
AUX_SOURCE_DIRECTORY(src DIR_SRCS) #.set environment variable,设置环境变量,编译用到的源文件全部都要放到这里,否则编译能够通过,但是执行的时候会出现各种问题,比如"symbol lookup error xxxxx , undefined symbol"
#SET(TEST_MATH${DIR_SRCS})
SET(OpenCV_DIR /lib/opencv2413/opencv-2.4.13.4/build)
FIND_PACKAGE(OpenCV REQUIRED)
#.add executable file,添加要编译的可执行文件
#ADD_EXECUTABLE(${PROJECT_NAME} ${DIR_SRCS}) #.add link library,添加可执行文件所需要的库,比如我们用到了libm.so(命名规则:lib+name+.so),就添加该库的名称
ADD_EXECUTABLE(read_json read_json.cpp)
TARGET_LINK_LIBRARIES(read_json ${OpenCV_LIBS})

使用Cmake的方法编译调试有问题,以后有时间遇到再解决。

3.注意json文件每条数据的层级关系,以及如何层层获取数据信息。

4.如果对JsonCpp库的某个函数调用有疑问可以查看源码学习。

参考

1.从文件提取json数据

2.How to install and use Jsoncpp library on Ubuntu

3.Jsoncpp详解

4.通过Jsoncpp类库读写JSON文件

5.JSON文件的读取和生成

6.open-source-parsers-jsoncpp-github;

【c++基础】从json文件提取数据的更多相关文章

  1. Ajax获取 Json文件提取数据

    摘自 Ajax获取 Json文件提取数据 1. json文件内容(item.json) [ { "name":"张国立", "sex":&q ...

  2. java实现服务端守护进程来监听客户端通过上传json文件写数据到hbase中

    1.项目介绍: 由于大数据部门涉及到其他部门将数据传到数据中心,大部分公司采用的方式是用json文件的方式传输,因此就需要编写服务端和客户端的小程序了.而我主要实现服务端的代码,也有相应的客户端的测试 ...

  3. springboot~openfeign从JSON文件读取数据

    对openfeign不清楚的同学可以先看我这篇文章:springboot~openfeign从此和httpClient说再见 对于openfeign来说,帮助我们解决了服务端调用服务端的问题,你不需要 ...

  4. JS基础语法---JSON格式的数据

         1. 对象: 有属性和方法,特指的某个事物     对象: 一组无序属性的集合的键值对,属性的值可以是任意的类型   2.JSON格式的数据:一般都是成对的,是键值对,     json也是 ...

  5. fs读取某个json文件的数据

    /** * Created by Administrator on 2016/7/12. * 流数据 */ var fs = require('fs'); var stream = fs.create ...

  6. Python从json中提取数据

    #json string:s = json.loads('{"name":"test", "type":{"name": ...

  7. 从XML文件和properties文件提取数据

    XML文档格式内容如下 <?xml version="1.0" encoding="UTF-8"?> <root>     <fi ...

  8. 通过Jquery中Ajax获取json文件数据

    1. JSON(JavaScript Object Notation): javaScript对象表示法: 是存储和交换文本信息的语法,比xml更小,更快,更易解析. 2. JSON基本书写格式 : ...

  9. python 将json格式的数据写入csv格式的文件中

    # coding=utf-8 import json import csv # 重新进行配置读写数据时的默认编码 import sys reload(sys) sys.setdefaultencodi ...

随机推荐

  1. zzw原创_expdp及impdp中的exclude及include参数的那点事

    zzw原创:转载请注明出处 在oracle的expdp 及imdpd命令中,exclude及include参数还是有一些要注意的地方,特别是涉及选择性条件时. 一.通用 1.exclude及inclu ...

  2. 使用web3+solc编译发布以太坊智能合约

    一.环境安装: 1.安装web3工程:npm install web3 2.安装solc工程:npm install solc二.在node环境中使用 先引用所需环境: var fs = requir ...

  3. js 奇淫技巧

    js没有用来统计字符串中含有多少个字母的方法 let value='aaa&bbb&aad123&333' 那么value共含有 value.length-value.repl ...

  4. WordDenified.exportedUI

    <mso:cmd app="Word" dt="1" /><mso:customUI xmlns:x1="xuzaAzWord&qu ...

  5. 微信PC客户端无法发送图片,怎么解决?

    今天登陆电脑的微信客户端,无法发送截图图片,该怎么办? 解决方法 1.在任务栏找到程序,右键找到设置

  6. 蓝桥杯—BASIC-27 2n皇后问题(DFS)

    问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后, 使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行. 同一列或 ...

  7. linux磁盘管理 磁盘查看操作

    df查看磁盘分区使用状况 df --显示磁盘分区使用状况 'l' 仅显示本地磁盘(默认) 'a' 显示所有文件系统的磁盘使用情况,包含比如/proc/ 'h' 以1024进制计算最合适的单位显示磁盘容 ...

  8. HTML5 ②

    html代码中的各种标签和特殊符号: 1.<p>段落标签 默认会在段落前后都有空行</p>: 2.<hr/> 水平线标签     <br/>换行标签   ...

  9. SQL-27 给出每个员工每年薪水涨幅超过5000的员工编号emp_no、薪水变更开始日期from_date以及薪水涨幅值salary_growth,并按照salary_growth逆序排列。 提示:在sqlite中获取datetime时间对应的年份函数为strftime('%Y', to_date)

    题目描述 给出每个员工每年薪水涨幅超过5000的员工编号emp_no.薪水变更开始日期from_date以及薪水涨幅值salary_growth,并按照salary_growth逆序排列. 提示:在s ...

  10. [ZJOI2008]泡泡堂BNB

    这个题...是一道神奇的贪心题... 根据田忌赛马的原理... 先假使两队都符合田忌和齐王的配置... 我们可以发现如果我们用当前最弱的...去和对方当前最强的打... 然后一直按照这个方案...当我 ...