JSON是一种轻量级的数据交换格式,它是基于ECMAScript的一个子集,使用完全独立于编程语言的文本格式来存储和表示数据,简洁清晰的的层次结构使得JSON成为理想的数据交换语言,Qt库为JSON的相关操作提供了完整的类支持.

创建一个解析文件,命名为config.json我们将通过代码依次解析这个JSON文件中的每一个参数,具体解析代码如下:

{
"blog": "https://www.cnblogs.com/lyshark",
"enable": true,
"status": 1024, "GetDict": {"address":"192.168.1.1","username":"root","password":"123456","update":"2020-09-26"},
"GetList": [1,2,3,4,5,6,7,8,9,0], "ObjectInArrayJson":
{
"One": ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],
"Two": ["Sunday","Monday","Tuesday"]
}, "ArrayJson": [
["192.168.1.1","root","22"],
["192.168.1.2","root","23"],
["192.168.1.3","root","24"],
["192.168.1.4","root","25"],
["192.168.1.5","root","26"]
], "ObjectJson": [
{"address":"192.168.1.1","username":"admin"},
{"address":"192.168.1.2","username":"root"},
{"address":"192.168.1.3","username":"lyshark"}
], "ObjectArrayJson": [
{"uname":"root","ulist":[1,2,3,4,5]},
{"uname":"lyshark","ulist":[11,22,33,44,55,66,77,88,99]}
], "NestingObjectJson": [
{
"uuid": "1001",
"basic": {
"lat": "12.657",
"lon": "55.789"
}
},
{
"uuid": "1002",
"basic": {
"lat": "31.24",
"lon": "25.55"
}
}
], "ArrayNestingArrayJson":
[
{
"telephone": "1323344521",
"path": [
[
11.5,22.4,56.9
],
[
19.4,34.6,44.7
]
]
}
]
}

实现修改单层根节点下面指定的节点元素,修改的原理是读入到内存替换后在全部写出到文件.

// 读取JSON文本
// https://www.cnblogs.com/lyshark
QString readonly_string(QString file_path)
{
QFile this_file_ptr(file_path);
if(false == this_file_ptr.exists())
{
return "None";
}
if(false == this_file_ptr.open(QIODevice::ReadOnly | QIODevice::Text))
{
return "None";
}
QString string_value = this_file_ptr.readAll(); this_file_ptr.close();
return string_value;
} // 写出JSON到文件
bool writeonly_string(QString file_path, QString file_data)
{
QFile this_file_ptr(file_path);
if(false == this_file_ptr.open(QIODevice::WriteOnly | QIODevice::Text))
{
return false;
} QByteArray write_byte = file_data.toUtf8(); this_file_ptr.write(write_byte,write_byte.length());
this_file_ptr.close();
return true;
} int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv); // 读文件
QString readonly_config = readonly_string("d:/config.json"); // 开始解析 解析成功返回QJsonDocument对象否则返回null
QJsonParseError err_rpt;
QJsonDocument root_document = QJsonDocument::fromJson(readonly_config.toUtf8(), &err_rpt);
if (err_rpt.error != QJsonParseError::NoError && !root_document.isNull())
{
return 0;
} // 获取根节点
QJsonObject root = root_document.object(); // 修改根节点下的子节点
root["blog"] = "https://www.baidu.com";
root["enable"] = false;
root["status"] = 2048; // 将object设置为本文档的主要对象
root_document.setObject(root); // 紧凑模式输出
// https://www.cnblogs.com/lyshark
QByteArray root_string_compact = root_document.toJson(QJsonDocument::Compact);
std::cout << "紧凑模式: " << root_string_compact.toStdString() << std::endl; // 规范模式输出
QByteArray root_string_indented = root_document.toJson(QJsonDocument::Indented);
std::cout << "规范模式: " << root_string_indented.toStdString() << std::endl; // 分别写出两个配置文件
writeonly_string("d:/indented_config.json",root_string_indented);
writeonly_string("d:/compact_config.json",root_string_compact); return a.exec();
}

实现修改单层对象与数组下面指定的节点元素,如上配置文件中的GetDict/GetList既是我们需要解析的内容.

// 读取JSON文本
// https://www.cnblogs.com/lyshark
QString readonly_string(QString file_path)
{
QFile this_file_ptr(file_path);
if(false == this_file_ptr.exists())
{
return "None";
}
if(false == this_file_ptr.open(QIODevice::ReadOnly | QIODevice::Text))
{
return "None";
}
QString string_value = this_file_ptr.readAll(); this_file_ptr.close();
return string_value;
} // 写出JSON到文件
bool writeonly_string(QString file_path, QString file_data)
{
QFile this_file_ptr(file_path);
if(false == this_file_ptr.open(QIODevice::WriteOnly | QIODevice::Text))
{
return false;
} QByteArray write_byte = file_data.toUtf8(); this_file_ptr.write(write_byte,write_byte.length());
this_file_ptr.close();
return true;
} int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv); // 读文件
QString readonly_config = readonly_string("d:/config.json"); // 开始解析 解析成功返回QJsonDocument对象否则返回null
QJsonParseError err_rpt;
QJsonDocument root_document = QJsonDocument::fromJson(readonly_config.toUtf8(), &err_rpt);
if (err_rpt.error != QJsonParseError::NoError && !root_document.isNull())
{
return 0;
} // 获取根节点
QJsonObject root = root_document.object(); // --------------------------------------------------------------------
// 修改GetDict对象内容
// -------------------------------------------------------------------- // 找到对象地址,并修改
QJsonObject get_dict_ptr = root.find("GetDict").value().toObject(); // 修改对象内存数据
get_dict_ptr["address"] = "127.0.0.1";
get_dict_ptr["username"] = "lyshark";
get_dict_ptr["password"] = "12345678";
get_dict_ptr["update"] = "2021-09-25"; // 赋值给根
root["GetDict"] = get_dict_ptr; // 将对象设置到根
root_document.setObject(root); // 规范模式
QByteArray root_string_indented = root_document.toJson(QJsonDocument::Indented); // 写配置文件
writeonly_string("d:/indented_config.json",root_string_indented); // --------------------------------------------------------------------
// 修改GetList数组内容
// -------------------------------------------------------------------- // 找到数组并修改
QJsonArray get_list_ptr = root.find("GetList").value().toArray(); // 替换指定下标的数组元素
get_list_ptr.replace(0,22);
get_list_ptr.replace(1,33); // 将当前数组元素直接覆盖到原始位置
QJsonArray item = {"admin","root","lyshark"};
get_list_ptr = item; // 设置到原始数组
root["GetList"] = get_list_ptr;
root_document.setObject(root); QByteArray root_string_list_indented = root_document.toJson(QJsonDocument::Indented);
writeonly_string("d:/indented_config.json",root_string_list_indented); return a.exec();
}

实现修改对象内对象Value列表下面指定的节点元素,如上配置文件中的ObjectInArrayJson既是我们需要解析的内容.

// 读取JSON文本
QString readonly_string(QString file_path)
{
QFile this_file_ptr(file_path);
if(false == this_file_ptr.exists())
{
return "None";
}
if(false == this_file_ptr.open(QIODevice::ReadOnly | QIODevice::Text))
{
return "None";
}
QString string_value = this_file_ptr.readAll(); this_file_ptr.close();
return string_value;
} // 写出JSON到文件
// https://www.cnblogs.com/lyshark
bool writeonly_string(QString file_path, QString file_data)
{
QFile this_file_ptr(file_path);
if(false == this_file_ptr.open(QIODevice::WriteOnly | QIODevice::Text))
{
return false;
} QByteArray write_byte = file_data.toUtf8(); this_file_ptr.write(write_byte,write_byte.length());
this_file_ptr.close();
return true;
} int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv); // 读文件
QString readonly_config = readonly_string("d:/config.json"); // 开始解析 解析成功返回QJsonDocument对象否则返回null
QJsonParseError err_rpt;
QJsonDocument root_document = QJsonDocument::fromJson(readonly_config.toUtf8(), &err_rpt);
if (err_rpt.error != QJsonParseError::NoError && !root_document.isNull())
{
return 0;
} // 获取根节点
QJsonObject root = root_document.object(); // --------------------------------------------------------------------
// 修改对象中的列表
// -------------------------------------------------------------------- // 找到对象地址并修改
QJsonObject get_dict_ptr = root.find("ObjectInArrayJson").value().toObject(); // 迭代器输出对象中的数据
QJsonObject::iterator it;
for(it=get_dict_ptr.begin(); it!= get_dict_ptr.end(); it++)
{
QString key = it.key();
QJsonArray value = it.value().toArray(); std::cout << "Key = " << key.toStdString() << " ValueCount = " << value.count() << std::endl; // 循环输出元素
for(int index=0; index < value.count(); index++)
{
QString val = value.toVariantList().at(index).toString();
std::cout << "-> " << val.toStdString() << std::endl;
}
} // 迭代寻找需要修改的元素并修改
for(it=get_dict_ptr.begin(); it!= get_dict_ptr.end(); it++)
{
QString key = it.key(); // 如果找到了指定的Key 则将Value中的列表替换到其中
if(key.toStdString() == "Two")
{
// 替换整个数组
QJsonArray value = {1,2,3,4,5};
get_dict_ptr[key] = value;
break;
}
else if(key.toStdString() == "One")
{
// 替换指定数组元素
QJsonArray array = get_dict_ptr[key].toArray(); array.replace(0,"lyshark");
array.replace(1,"lyshark");
array.removeAt(1); // 写回原JSON字符串
get_dict_ptr[key] = array;
}
} // 赋值给根
root["ObjectInArrayJson"] = get_dict_ptr; // 将对象设置到根
root_document.setObject(root); // 规范模式
QByteArray root_string_indented = root_document.toJson(QJsonDocument::Indented); // 写配置文件
writeonly_string("d:/indented_config.json",root_string_indented); return a.exec();
}

实现修改匿名数组中的数组元素下面指定的节点元素,如上配置文件中的ArrayJson既是我们需要解析的内容.

// 读取JSON文本
// https://www.cnblogs.com/lyshark
QString readonly_string(QString file_path)
{
QFile this_file_ptr(file_path);
if(false == this_file_ptr.exists())
{
return "None";
}
if(false == this_file_ptr.open(QIODevice::ReadOnly | QIODevice::Text))
{
return "None";
}
QString string_value = this_file_ptr.readAll(); this_file_ptr.close();
return string_value;
} // 写出JSON到文件
bool writeonly_string(QString file_path, QString file_data)
{
QFile this_file_ptr(file_path);
if(false == this_file_ptr.open(QIODevice::WriteOnly | QIODevice::Text))
{
return false;
} QByteArray write_byte = file_data.toUtf8(); this_file_ptr.write(write_byte,write_byte.length());
this_file_ptr.close();
return true;
} int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv); // 读文件
QString readonly_config = readonly_string("d:/config.json"); // 开始解析 解析成功返回QJsonDocument对象否则返回null
QJsonParseError err_rpt;
QJsonDocument root_document = QJsonDocument::fromJson(readonly_config.toUtf8(), &err_rpt);
if (err_rpt.error != QJsonParseError::NoError && !root_document.isNull())
{
return 0;
} // 获取根节点
QJsonObject root = root_document.object(); // --------------------------------------------------------------------
// 修改数组中的数组
// -------------------------------------------------------------------- QJsonArray array_value = root.value("ArrayJson").toArray();
int insert_index = 0; // 循环查找IP地址,找到后将其弹出
for(int index=0; index < array_value.count(); index++)
{
QJsonValue parset = array_value.at(index); if(parset.isArray())
{
QString address = parset.toArray().at(0).toString(); // 寻找指定行下标,并将其弹出
if(address == "192.168.1.3")
{
std::cout << "找到该行下标: " << index << std::endl;
insert_index = index;
array_value.removeAt(index);
}
}
} // 新增一行IP地址
QJsonArray item = {"192.168.1.3","lyshark","123456"};
array_value.insert(insert_index,item); // 赋值给根
root["ArrayJson"] = array_value; // 将对象设置到根
root_document.setObject(root); // 规范模式
QByteArray root_string_indented = root_document.toJson(QJsonDocument::Indented); // 写配置文件
// https://www.cnblogs.com/lyshark
writeonly_string("d:/indented_config.json",root_string_indented); return a.exec();
}

实现修改数组中对象元素下面指定的节点元素,如上配置文件中的ObjectJson既是我们需要解析的内容.

// 读取JSON文本
QString readonly_string(QString file_path)
{
QFile this_file_ptr(file_path);
if(false == this_file_ptr.exists())
{
return "None";
}
if(false == this_file_ptr.open(QIODevice::ReadOnly | QIODevice::Text))
{
return "None";
}
QString string_value = this_file_ptr.readAll(); this_file_ptr.close();
return string_value;
} // 写出JSON到文件
// https://www.cnblogs.com/lyshark
bool writeonly_string(QString file_path, QString file_data)
{
QFile this_file_ptr(file_path);
if(false == this_file_ptr.open(QIODevice::WriteOnly | QIODevice::Text))
{
return false;
} QByteArray write_byte = file_data.toUtf8(); this_file_ptr.write(write_byte,write_byte.length());
this_file_ptr.close();
return true;
} int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv); // 读文件
QString readonly_config = readonly_string("d:/config.json"); // 开始解析 解析成功返回QJsonDocument对象否则返回null
QJsonParseError err_rpt;
QJsonDocument root_document = QJsonDocument::fromJson(readonly_config.toUtf8(), &err_rpt);
if (err_rpt.error != QJsonParseError::NoError && !root_document.isNull())
{
return 0;
} // 获取根节点
QJsonObject root = root_document.object(); // --------------------------------------------------------------------
// 修改数组中的对象数值
// -------------------------------------------------------------------- QJsonArray array_value = root.value("ObjectJson").toArray(); for(int index=0; index < array_value.count(); index++)
{
QJsonObject object_value = array_value.at(index).toObject(); /*
// 第一种输出方式
if(!object_value.isEmpty())
{
QString address = object_value.value("address").toString();
QString username = object_value.value("username").toString();
std::cout << "地址: " << address.toStdString() << " 用户名: " << username.toStdString() << std::endl;
} // 第二种输出方式
QVariantMap map = object_value.toVariantMap();
if(map.contains("address") && map.contains("username"))
{
QString address_map = map["address"].toString();
QString username_map = map["username"].toString();
std::cout << "地址: " << address_map.toStdString() << " 用户名: " << username_map.toStdString() << std::endl;
}
*/ // 开始移除指定行
QVariantMap map = object_value.toVariantMap();
if(map.contains("address") && map.contains("username"))
{
QString address_map = map["address"].toString(); // 如果是指定IP则首先移除该行
if(address_map == "192.168.1.3")
{
// 首先根据对象序号移除当前对象
array_value.removeAt(index); // 接着增加一个新的对象
object_value["address"] = "127.0.0.1";
object_value["username"] = "lyshark"; // 插入到移除的位置上
array_value.insert(index,object_value);
break;
}
}
} // 赋值给根
root["ObjectJson"] = array_value; // 将对象设置到根
root_document.setObject(root); // 规范模式
QByteArray root_string_indented = root_document.toJson(QJsonDocument::Indented); // 写配置文件
writeonly_string("d:/indented_config.json",root_string_indented); return a.exec();
}

实现修改对象中数组元素下面指定的节点元素,如上配置文件中的ObjectArrayJson既是我们需要解析的内容.

// 读取JSON文本
QString readonly_string(QString file_path)
{
QFile this_file_ptr(file_path);
if(false == this_file_ptr.exists())
{
return "None";
}
if(false == this_file_ptr.open(QIODevice::ReadOnly | QIODevice::Text))
{
return "None";
}
QString string_value = this_file_ptr.readAll(); this_file_ptr.close();
return string_value;
} // 写出JSON到文件
// https://www.cnblogs.com/lyshark
bool writeonly_string(QString file_path, QString file_data)
{
QFile this_file_ptr(file_path);
if(false == this_file_ptr.open(QIODevice::WriteOnly | QIODevice::Text))
{
return false;
} QByteArray write_byte = file_data.toUtf8(); this_file_ptr.write(write_byte,write_byte.length());
this_file_ptr.close();
return true;
} int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv); // 读文件
QString readonly_config = readonly_string("d:/config.json"); // 开始解析 解析成功返回QJsonDocument对象否则返回null
QJsonParseError err_rpt;
QJsonDocument root_document = QJsonDocument::fromJson(readonly_config.toUtf8(), &err_rpt);
if (err_rpt.error != QJsonParseError::NoError && !root_document.isNull())
{
return 0;
} // 获取根节点
QJsonObject root = root_document.object(); // --------------------------------------------------------------------
// 修改对象中的数组元素
// -------------------------------------------------------------------- QJsonArray array_value = root.value("ObjectArrayJson").toArray(); for(int index=0; index < array_value.count(); index++)
{
QJsonObject object_value = array_value.at(index).toObject(); // 开始移除指定行
QVariantMap map = object_value.toVariantMap();
if(map.contains("uname") && map.contains("ulist"))
{
QString uname = map["uname"].toString(); // 如果是指定IP则首先移除该行
if(uname == "lyshark")
{
QJsonArray ulist_array = map["ulist"].toJsonArray(); // 替换指定数组元素
ulist_array.replace(0,100);
ulist_array.replace(1,200);
ulist_array.replace(2,300); // 输出替换后数组元素
for(int index =0; index < ulist_array.count(); index ++)
{
int val = ulist_array.at(index).toInt();
std::cout << "替换后: " << val << std::endl;
} // 首先根据对象序号移除当前对象
array_value.removeAt(index); // 接着增加一个新的对象与新列表
object_value["uname"] = uname;
object_value["ulist"] = ulist_array; // 插入到移除的位置上
array_value.insert(index,object_value);
break;
}
}
} // 赋值给根
root["ObjectArrayJson"] = array_value; // 将对象设置到根
root_document.setObject(root); // 规范模式
QByteArray root_string_indented = root_document.toJson(QJsonDocument::Indented); // 写配置文件
writeonly_string("d:/indented_config.json",root_string_indented); return a.exec();
}

实现修改对象嵌套对象嵌套对象下面指定的节点元素,如上配置文件中的NestingObjectJson既是我们需要解析的内容.

// 读取JSON文本
QString readonly_string(QString file_path)
{
// https://www.cnblogs.com/lyshark
QFile this_file_ptr(file_path);
if(false == this_file_ptr.exists())
{
return "None";
}
if(false == this_file_ptr.open(QIODevice::ReadOnly | QIODevice::Text))
{
return "None";
}
QString string_value = this_file_ptr.readAll(); this_file_ptr.close();
return string_value;
} // 写出JSON到文件
bool writeonly_string(QString file_path, QString file_data)
{
QFile this_file_ptr(file_path);
if(false == this_file_ptr.open(QIODevice::WriteOnly | QIODevice::Text))
{
return false;
} QByteArray write_byte = file_data.toUtf8(); this_file_ptr.write(write_byte,write_byte.length());
this_file_ptr.close();
return true;
} int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv); // 读文件
QString readonly_config = readonly_string("d:/config.json"); // 开始解析 解析成功返回QJsonDocument对象否则返回null
QJsonParseError err_rpt;
QJsonDocument root_document = QJsonDocument::fromJson(readonly_config.toUtf8(), &err_rpt);
if (err_rpt.error != QJsonParseError::NoError && !root_document.isNull())
{
return 0;
} // 获取根节点
// https://www.cnblogs.com/lyshark
QJsonObject root = root_document.object();
int insert_index = 0; // --------------------------------------------------------------------
// 修改对象中嵌套对象嵌套对象
// -------------------------------------------------------------------- // 寻找节点中数组位置
QJsonArray array_object = root.find("NestingObjectJson").value().toArray();
std::cout << "节点数量: " << array_object.count() << std::endl; for(int index=0; index < array_object.count(); index++)
{
// 循环寻找UUID
QJsonObject object = array_object.at(index).toObject(); QString uuid = object.value("uuid").toString(); // 如果找到了则移除该元素
if(uuid == "1002")
{
insert_index = index;
array_object.removeAt(index);
break;
}
} // --------------------------------------------------------------------
// 开始插入新对象
// -------------------------------------------------------------------- // 开始创建新的对象
QJsonObject sub_json; sub_json.insert("lat","100.5");
sub_json.insert("lon","200.5"); QJsonObject new_json; new_json.insert("uuid","1005");
new_json.insert("basic",sub_json); // 将对象插入到原位置上
array_object.insert(insert_index,new_json); // 赋值给根
root["NestingObjectJson"] = array_object; // 将对象设置到根
root_document.setObject(root); // 规范模式
QByteArray root_string_indented = root_document.toJson(QJsonDocument::Indented); // 写配置文件
writeonly_string("d:/indented_config.json",root_string_indented); return a.exec();
}

实现修改对象嵌套多层数组下面指定的节点元素,如上配置文件中的ArrayNestingArrayJson既是我们需要解析的内容.

// 读取JSON文本
QString readonly_string(QString file_path)
{
QFile this_file_ptr(file_path);
if(false == this_file_ptr.exists())
{
return "None";
}
// https://www.cnblogs.com/lyshark
if(false == this_file_ptr.open(QIODevice::ReadOnly | QIODevice::Text))
{
return "None";
}
QString string_value = this_file_ptr.readAll(); this_file_ptr.close();
return string_value;
} // 写出JSON到文件
bool writeonly_string(QString file_path, QString file_data)
{
QFile this_file_ptr(file_path);
if(false == this_file_ptr.open(QIODevice::WriteOnly | QIODevice::Text))
{
return false;
} QByteArray write_byte = file_data.toUtf8(); this_file_ptr.write(write_byte,write_byte.length());
this_file_ptr.close();
return true;
} int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv); // 读文件
QString readonly_config = readonly_string("d:/config.json"); // 开始解析 解析成功返回QJsonDocument对象否则返回null
QJsonParseError err_rpt;
QJsonDocument root_document = QJsonDocument::fromJson(readonly_config.toUtf8(), &err_rpt);
if (err_rpt.error != QJsonParseError::NoError && !root_document.isNull())
{
return 0;
} // 获取根节点
QJsonObject root = root_document.object();
int insert_index = 0; // --------------------------------------------------------------------
// 修改对象中嵌套双层数组
// -------------------------------------------------------------------- // 寻找节点中数组位置
QJsonArray array_object = root.find("ArrayNestingArrayJson").value().toArray();
std::cout << "节点数量: " << array_object.count() << std::endl; for(int index=0; index < array_object.count(); index++)
{
// 循环寻找UUID
QJsonObject object = array_object.at(index).toObject(); QString uuid = object.value("telephone").toString(); // 如果找到了则移除该元素
if(uuid == "1323344521")
{
insert_index = index;
array_object.removeAt(index);
break;
}
} // --------------------------------------------------------------------
// 开始新的数组元素
// -------------------------------------------------------------------- QJsonArray array;
QJsonArray x,y; // 追加子数组
x.append(11.5);
x.append(22.4);
x.append(33.6); y.append(56.7);
y.append(78.9);
y.append(98.4); // 追加到外层数组
array.append(x);
array.append(y); // 创建{}对象节点
QJsonObject object; object["telephone"] = "1323344521";
object["path"] = array; // 将对象插入到原位置上
array_object.insert(insert_index,object); // 赋值给根
root["ArrayNestingArrayJson"] = array_object; // 将对象设置到根
root_document.setObject(root); // 规范模式
QByteArray root_string_indented = root_document.toJson(QJsonDocument::Indented); // 写配置文件
writeonly_string("d:/indented_config.json",root_string_indented); return a.exec();
}

C/C++ Qt 使用JSON解析库 [修改篇]的更多相关文章

  1. C/C++ Qt 运用JSON解析库 [基础篇]

    JSON是一种简单的轻量级数据交换格式,Qt库为JSON的相关操作提供了完整的类支持,使用JSON解析文件之前需要先通过TextStream流将文件读入到字符串变量内,然后再通过QJsonDocume ...

  2. [转]C++的Json解析库:jsoncpp和boost

    JSON(JavaScript Object Notation)跟xml一样也是一种数据交换格式,了解json请参考其官网http://json.org,本文不再对json做介绍,将重点介绍c++的j ...

  3. Tomjson - 一个"短小精悍"的 json 解析库

    Tomjson,一个"短小精悍"的 json 解析库,tomjson使用Java语言编写,主要作用是把Java对象(JavaBean)序列化为json格式字符串,将json格式字符 ...

  4. fastjson是阿里巴巴的开源JSON解析库

    fastjson的API十分简洁. String text = JSON.toJSONString(obj); //序列化 VO vo = JSON.parseObject("{...}&q ...

  5. python 中的json解析库

    当一个json 数据很大的时候.load起来是很耗时的.python中常见的json解析库有cjson,simplesjson,json, 初步比较了一下, 对于loads来讲 simplejson ...

  6. Tomjson - json 解析库

    Tomjson - 一个"短小精悍"的 json 解析库 Tomjson,一个"短小精悍"的 json 解析库,tomjson使用Java语言编写,主要作用是把 ...

  7. C++的Json解析库:jsoncpp和boost

    C++的Json解析库:jsoncpp和boost - hzyong_c的专栏 - 博客频道 - CSDN.NET C++的Json解析库:jsoncpp和boost 分类: 网络编程 开源库 201 ...

  8. Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例

    Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例 继上篇json解析,我用了原生的json解析,但是在有些情况下我们不得不承认,一些优秀的json解析框架确实十分的 ...

  9. C++的Json解析库:jsoncpp和boost(转)

    原文转自 http://blog.csdn.net/hzyong_c/article/details/7163589 JSON(JavaScript Object Notation)跟xml一样也是一 ...

  10. 常用json解析库比较及选择 fastjson & gson

    一.常用json解析库比较及选择 1.简介 fastjson和gson是目前比较常用的json解析库,并且现在我们项目代码中,也在使用这两个解析库. fastjson 是由阿里开发的,号称是处理jso ...

随机推荐

  1. expect --批量传递公钥

    #!/binbash ! rpm -qa |grep expect &> /dev/null && yum -y install expect #判断是否已下载expec ...

  2. Spring | 利用Maven搭建Spring的开发环境

    本节主要介绍如何利用Maven搭建 Spring 开发环境,使用 Spring 之前需要安装 JDK .Maven和 IDEA 建议一定要从 Maven 项目开始,而不是从空项目开始,空项目开始会出现 ...

  3. <vue 路由 8、keep-alive的使用>

    一.     知识点 1.什么是keep-alive? keep-alive是Vue.js的一个内置组件. 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们.它自身不会渲染一个 DOM 元素,也 ...

  4. 报错:for..in loops iterate over the entire prototype chain, which is virtually never what you want.

    for..in loops iterate over the entire prototype chain, which is virtually never what you want. 意思是使用 ...

  5. 黑池舞蹈节banner

  6. 类的MRO属性 C3算法

    C3算法 class A(object): pass class B(A): pass class C(A): pass class D(B): pass class E(C): pass class ...

  7. 使用markdown语法做笔记,相比txt多了很多样式

  8. [转帖]如何用 30s 给面试官讲清楚什么是 Session-Cookie 认证

    https://www.jianshu.com/p/e1121d4d7084 引言 由于 HTTP 协议是无状态的,完成操作关闭浏览器后,客户端和服务端的连接就断开了,所以我们必须要有一种机制来保证客 ...

  9. TiDB恢复部分表的方式方法

    TiDB恢复部分表的方式方法 背景 今天同事告知误删了部分表. 因为是UAT准生产的环境, 所以仅有每天晚上11点的备份处理. 同时告知 昨天的数据也可以. 得到认可后进行了 TiDB的单表备份恢复. ...

  10. [转帖]CentOS-7-x86_64-DVD-2009 rpm包列表(centos7.9)

    https://www.cnblogs.com/hiyang/p/14803391.html 文件数 4071 个,共3.8G 复制389-ds-base-1.3.10.2-6.el7.x86_64. ...