QJSON
JSON(JavaScript Object Notation)是一个轻量级的数据交换格式; 可以将数据以name/value的形式任意组合;
QJson 是一个基于Qt的库, 将JSON的数据map成name-QVariant的形式, 或者进行反相转换; 通过Q_PROPERTY还可以转换QObject类中的数据;
QJSON Source http://qjson.sourceforge.net/ (需要编译lib来link)
Build 测试时在Windows下进行, 所以我尝试用IDE的方式编译:
1. 用QtCreator打开CMakeList.txt, 进行Configure;
2. 生成了qjson项目, Build All
Note 这里有个error, '_strtoui64' was not declared in this scope, 是作者在修VS2012的bug时introduce的, 只要找到json_scanner.cc, 把strtoll和strtoull两个宏注释掉就行;
3. 在Qt项目中引入QJSN的library, QJSON对QtCore有dependency. e.g. LIBS += -L"PathToQJSONLib" -l"qjson"
Note 注意环境变量中的各种Qt版本, QJSON中的CMake会自动搜索任意的Qt Binary, 需要手动设置Qt路径, 否则会出现库版本不一致的问题;
e.g. 格式: String必须用"" 包括起来, 使用"\"来转义字符;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
QString query(
"{\"name\":\"newName\",\"size\":\"Godzilla\", \"price\":111.222}"
);
//parse
QByteArray json = query.toUtf8();
QJson::Parser parser;
bool
ok;
QVariantMap result = parser.parse (json, &ok).toMap();
if
(ok)
{
QHash<
int
, QByteArray> roleNames = item->roleNames();
QHash<
int
, QByteArray>::iterator iter;
for
(iter = roleNames.begin(); iter != roleNames.end(); ++iter)
{
if
(result.value(iter.value()).isValid())
item->setData(iter.key(), result.value(iter.value()));
else
cout<<
"no data"
|