当前位置: 首页 > 工具软件 > JsonCpp > 使用案例 >

jsoncpp详解

西门骁
2023-12-01

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,和xml类似。

Jsoncpp是个跨平台的开源库,下载地址:http://sourceforge.net/projects/jsoncpp/

json中仅支持两种结构:

     1)name->value键值对(pair)的集合,一般称为对象(object)。

     2)值的有序表,一般称为数组(array)。      

1:pair  

先从键值对(pair)开始,一个pair的通常结是:string:value 

键值之间的对应关系使用:表示,左边的为name,右边的为value。

一般key使用字符串,当然也可以使用数字,但是不推荐。
value的取值就比较随便,可以是任何任何json支持的类型(比如object,array,string,number,true/false,null等)。

2. object              

object可以认为是多个pair的集合,其语法是以{作为object开始,以 } 作为object结束,不同的pair之间使用,分割。需要说明的是object中的数据存储是无序的。下面是一个比较典型的object构成。

{
"name" : "tocy",
"age" : 1000
}

3. array

array是value的有序集合。其语法是以[作为array起始,以]作为array结束,array元素之间使用,分割。实际使用中建议在array中使用统一的类型,否则解析起来会麻烦点。比如下面语法是合法的:

[{"name":"tocy"}, {"age":1000}, {"domain":"cn"}]

 下面介绍一下具体的使用:

读json文件:文件名text.json,文件内容

[
    {
        "text": "请帮我显示地图",
        "intent": "screen_transition_Map",
        "intent_prediction": {
            "name": "media_control_stop",
            "confidence": 0.06185858448739933
        }
    },
    {
        "text": "打开音乐",
        "intent": "media_control_play",
        "intent_prediction": {
            "name": "media_control_power_on",
            "confidence": 0.3026158324053915
        }
    }
]

  具体代码:

#include <iostream>
#include <stdio.h>
#include <fstream>
#include <string>
#include "json/json.h"
using namespace std;

int main()
{ 

    ifstream is("text.json", ios::binary);
 
    if (!is.is_open()) {
        cout << "open json file failed." << endl;
        return -1;
    }

    Json::Reader reader;
    Json::Value root;

    string text;
    string intent;//实际intent
    string intent_prediction;//预测intent
    string intent_prediction_name;//预测intent name
    if (reader.parse(is, root)) {
	int pSize = root.size();
	printf("size: %d\n", pSize);
	for (int i = 1; i < pSize; i++) {
	    intent = root[i]["intent"].asString();
	    text = root[i]["text"].asString();
	    Json::Value pSonroot = root[i]["intent_prediction"];
	    intent_prediction_name = pSonroot["name"].asString();
            is.close();
	}
    }
    return 0;
}

写json文件:

#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <string>
#include "json/json.h"

using namespace std;
int main()
{ 

   //写textJson文件
   Json::StyledWriter writer;
   Json::Value pResultroot;
   ofstream os;
   os.open("CompareResult.json");
   //给textJson文件的text,intent,intent_prediction赋值
	
   pResultroot["text"] = text;
   pResultroot["intent"] = intent;
   pResultroot["intent_prediction"] = intent_prediction_name;
   Json::Value pAlltext;//pResultroot对象中又含有数组
   int Rcount = 0;
   for (int i = 0; i < 10; i++) {
	pAlltext[Rcount++]["text"] = text;//这里的text是从某文件中取出的,我省略没写
   }
   pResultroot["4all_text"] = pAlltext;
   os << writer.write(pResultroot);
   os.close();
   return 0;
}

输出结果:

{
   "1text" : "打开音乐",
   "2intent" : "media_control_play",
   "3intent_prediction" : "media_control_power_on",
   "4all_text" : [
      {
         "text" : "打开音乐"
      },
      {
         "text" : "打开音频"
      },
      {
         "text" : "来点音乐"
      }
   ]
}

 

 类似资料: