首页 > 编程知识 正文

c读取并解析json数据,net解析json

时间:2023-12-27 01:51:13 阅读:323044 作者:GCZT

本文目录一览:

C++ json解析

C++ 解析Json——jsoncpp

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,和xml类似,本文主要对VS2008中使用Jsoncpp解析json的方法做一下记录。

Jsoncpp是个跨平台的开源库,下载地址:,我下载的是v0.5.0,压缩包大约104K。

方法一:使用Jsoncpp生成的lib文件

解压上面下载的Jsoncpp文件,在jsoncpp-src-0.5.0/makefiles/vs71目录里找到jsoncpp.sln,用VS2008版本编译,默认生成静态链接库。 在工程中引用,只需要包含include/json下的头文件及生成的.lib文件即可。

如何包含lib文件:在.cpp文件中#pragma comment(lib."json_vc71_libmt.lib"),在工程属性中Linker下Input中Additional Dependencies写入lib文件名字(Release下为json_vc71_libmt.lib,Debug为json_vc71_libmtd.lib)

注意:Jsoncpp的lib工程编译选项要和VS工程中的编译选项保持一致。如lib文件工程编译选项为MT(或MTd),VS工程中也要选择MT(或MTd),否则会出现编译错误问题,debug和release下生成的lib文件名字不同,注意不要看错了,当成一个文件来使用(我就犯了这个错误)。

方法二:使用Jsoncpp包中的.cpp和.h文件

解压上面下载的Jsoncpp文件,把jsoncpp-src-0.5.0文件拷贝到工程目录下,将jsoncpp-src-0.5.0jsoncpp-src-0.5.0includejson和jsoncpp-src-0.5.0jsoncpp-src-0.5.0srclib_json目录里的文件包含到VS工程中,在VS工程的属性C/C++下General中Additional Include Directories包含头文件目录.jsoncpp-src-0.5.0include。在使用的cpp文件中包含json头文件即可,如:#include "json/json.h"。将json_reader.cpp、json_value.cpp和json_writer.cpp三个文件的Precompiled Header属性设置为Not Using Precompiled Headers,否则编译会出现错误。

jsoncpp 使用详解

jsoncpp 主要包含三种类型的 class:Value、Reader、Writer。jsoncpp 中所有对象、类名都在 namespace Json 中,包含 json.h 即可。

Json::Value 只能处理 ANSI 类型的字符串,如果 C++ 程序是用 Unicode 编码的,最好加一个 Adapt 类来适配。

下面是从网上找的代码示例:

1. 从字符串解析json

const char* str = "{"uploadid": "UP000000","code": 100,"msg": "","files": ""}";

Json::Reader reader;

Json::Value root;

if (reader.parse(str, root)) // reader将Json字符串解析到root,root将包含Json里所有子元素

{

std::string upload_id = root["uploadid"].asString(); // 访问节点,upload_id = "UP000000"

int code = root["code"].asInt(); // 访问节点,code = 100

}

2. 从文件解析json

int ReadJsonFromFile(const char* filename)

{

Json::Reader reader;// 解析json用Json::Reader

Json::Value root; // Json::Value是一种很重要的类型,可以代表任意类型。如int, string, object, array

std::ifstream is;

is.open (filename, std::ios::binary );

if (reader.parse(is, root, FALSE))

{

std::string code;

if (!root["files"].isNull()) // 访问节点,Access an object value by name, create a null member if it does not exist.

code = root["uploadid"].asString();

code = root.get("uploadid", "null").asString();// 访问节点,Return the member named key if it exist, defaultValue otherwise.

int file_size = root["files"].size(); // 得到"files"的数组个数

for(int i = 0; i file_size; ++i) // 遍历数组

{

Json::Value val_image = root["files"][i]["images"];

int image_size = val_image.size();

for(int j = 0; j image_size; ++j)

{

std::string type = val_image[j]["type"].asString();

std::string url = val_image[j]["url"].asString();

printf("type : %s, url : %s n", type.c_str(), url.c_str());

}

}

}

is.close();

return 0;

}

3. 向文件中插入json

void WriteJsonData(const char* filename)

{

Json::Reader reader;

Json::Value root; // Json::Value是一种很重要的类型,可以代表任意类型。如int, string, object, array

std::ifstream is;

is.open (filename, std::ios::binary );

if (reader.parse(is, root))

{

Json::Value arrayObj; // 构建对象

Json::Value new_item, new_item1;

new_item["date"] = "2011-11-11";

new_item1["time"] = "11:11:11";

arrayObj.append(new_item); // 插入数组成员

arrayObj.append(new_item1); // 插入数组成员

int file_size = root["files"].size();

for(int i = 0; i file_size; ++i)

root["files"][i]["exifs"] = arrayObj; // 插入原json中

std::string out = root.toStyledString();

// 输出无格式json字符串

Json::FastWriter writer;

std::string strWrite = writer.write(root);

std::ofstream ofs;

ofs.open("test_write.json");

ofs strWrite;

ofs.close();

}

is.close();

}

JSON解析器json-c

JSON-C实现了一个引用计数对象模型,它允许您轻松地使用C语言来构建JSON对象,将它们输出为JSON格式的字符串,并将JSON格式字符串解析回JSON对象的C语言表示形式。它的目标是符合 RFC 7159 标准。

使用automake的编译过程如下:

使用cmake编译的过程如下:

cmake可选的几个编译选项为:

要使用json-c,最简单的方式是包含json.h头文件即可,或者最好是下列更具体的头文件之一:

详细且全面的API介绍文档:

JSON-C支持的JSON对象类型有7种:

下面系列函数用于创建一个JSON对象:

给JSON对象增加字段(不会增加引用计数):

删除json对象的指定字段,被删除的对象引用计数减去1,如果这个val没有更多的所有者,这个key对应的val被free,否则这个val的引用保存在内存中:

增加一个元素到json数组的末尾,obj引用计数不会增加,增加字段的方式更加紧凑;如果需要获取val的引用,需要用json_object_get()来传递该对象:

替换json数组中的值:

json数组的排序,这里需要自己写排序函数:

获取json对象的长度,依据字段的数目:

获取json对象的哈希表:

获取对象的数组列表:

获取json的类型:

获取json数组对象的长度:

获取json对象的bool值,int和double对象是0转换为FALSE,否则返回TRUE;非0长度的字符串返回TRUE;其他对象非空的话,返回TRUE:

获取json对象的长度,如果参数不是string类型的json,返回0:

按照索引获取json数组的对象:

转换json对象到c字符串格式:

获取JSON中指定类型的数值:

将字符串转换为json对象:

以下两个函数配合使用,前者获取该对象指针的所有权,引用计数加1,如果对象已经被释放,返回NULL;后者引用计数减1,如果对象已经被释放,返回1:

类型判断:

json_util.h提供了有关文件读写操作的函数,这个文件的内容是json格式的:

cjson数组如何解析

JSONObject Gson Xstream等等的类库都可以解析

请把你的json代码提交上来JSONObject object = new JSONObject(json);JSONObject root = object.getJSONObject("root"); JSONObject data = root.getJSONObject("data"); JSONArray list = data.getJSONArray("list");for(int i=0; ilist.length(); i++){ JSONObject entityObj = list.getJSONObject(i); JSONArray entitys = entityObj.getJSONArray("entity"); for(int j=0; jentitys.length(); j++){ JSONObject entity = entitys.getJSONObject(j); String date = entity.getString("取消日期"); } }引入jar,替换你的json直接可运行

如何使用c语言获取文件中的json数据

直接文件操作就行了。fopen,然后直接读出文件中的json数据,保存到一个数组里面就行了

C#中怎么解析JSON数据?

首先要知道json 的格式 把dataset中datatable表中数据转成json格式 public static string JsonConvert(DataSet ds)

{

StringBuilder sb = new StringBuilder();

sb.Append("[");

for (int i=0;ids.Tables[0].Rows.Count;i++)

{

sb.Append("{");

for (int j = 0; j ds.Tables[0].Columns.Count; j++)

{

sb.Append("");

sb.Append(ds.Tables[0].Columns[j].ColumnName);

sb.Append(":"");

sb.Append(ds.Tables[0].Rows[i][j].ToString().Trim());

sb.Append("",");

}

sb.Remove(sb.Length-1,1);

sb.Append("},");

}

sb.Remove(sb.Length-1,1);

sb.Append("]");

return sb.ToString();

} /// summary

/// 将Ilist转成json格式

/// /summary

/// param name="list"/param

/// returns/returns

public static string JsonConvert(IListTransBody list)

{

try

{

System.Runtime.Serialization.Json.DataContractJsonSerializer seializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(list.GetType());

using (MemoryStream ms = new MemoryStream())

{

seializer.WriteObject(ms, list);

return Encoding.UTF8.GetString(ms.ToArray());

}

}

catch

{

return null;

}

}把json格式转成ILIST 格式

public static object ConvertJson(string json ,Type t)

{

try

{

System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(t);

using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))

{

return serializer.ReadObject(ms);

}

}

catch

{

return null;

}

}

c如何解析json数据

你知道json的逻辑结构吗?

JSONObjectjson=newJSONObject();

JSONArrayjsonMembers=newJSONArray();

for(Deptdaily:dailys){

JSONObjectmember=newJSONObject();

member.put("dept_name",daily.getDPT_NAME());

member.put("user_name",daily.getUser_name());

if(daily.getE_mail()==null){

daily.setE_mail("暂无");

}

member.put("email",daily.getE_mail());

member.put("daily_date",daily.getDaily_date());

jsonMembers.put(member);

}

JSONArrayjsonMembers1=newJSONArray();

JSONObjectmember1=newJSONObject();

member1.put("pagesize",dept.getPagesize());

member1.put("allpage",dept.getAllpage());

member1.put("allitems",dept.getAllitems());

member1.put("nowpage",dept.getNowpage());

jsonMembers1.put(member1);

json.put("check",jsonMembers);

json.put("page",jsonMembers1);

out.print(json);

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。