遍历JsonCpp中的对象

我有一个使用jsoncpp解码JSON字符串的C

++应用程序。我创建了以下函数,但仅向我显示了顶级对象…

如何获取转储整个对象列表的信息?

SaveJSON( json_data );

bool CDriverConfigurator::PrintJSONTree( Json::Value & root, unsigned short depth /* = 0 */)

{

printf( " {type=[%d], size=%d} ", root.type(), root.size() );

if( root.size() > 0 ) {

for( Json::ValueIterator itr = root.begin() ; itr != root.end() ; itr++ ) {

PrintJSONTree( itr.key(), depth+1 );

}

return true;

}

// Print depth.

for( int tab = 0 ; tab < depth; tab++) {

printf( "-");

}

if( root.isString() ) {

printf( " %s", root.asString().c_str() );

} else if( root.isBool() ) {

printf( " %d", root.asBool() );

} else if( root.isInt() ) {

printf( " %d", root.asInt() );

} else if( root.isUInt() ) {

printf( " %d", root.asUInt() );

} else if( root.isDouble() ) {

printf( " %f", root.asDouble() );

}

else

{

printf( " unknown type=[%d]", root.type() );

}

printf( "\n" );

return true;

}

{

"modules":[

{

"config":{

"position":[

129,

235

]

},

"name":"Modbus Task",

"value":{

"DeviceID":"This is the name",

"Function":"01_READ_COIL_STATUS",

"Length":"99",

"Scan":"111",

"Type":"Serve"

}

},

{

"config":{

"position":[

13,

17

]

},

"name":"Modbus Connection",

"value":{

"Baud":"9600",

"timeout":"2.5"

}

},

{

"config":{

"position":[

47,

145

]

},

"name":"Modbus Device",

"value":{

"DeviceID":"55"

}

},

{

"config":{

"position":[

363,

512

]

},

"name":"Function Something",

"value":{

}

},

{

"config":{

"position":[

404,

701

]

},

"name":"Function Something",

"value":{

}

}

],

"properties":{

"Blarrg":"",

"description":"",

"name":"Modbus"

},

"wires":[

{

"src":{

"moduleId":1,

"terminal":"modbus.connection.output"

},

"tgt":{

"moduleId":2,

"terminal":"modbus.connection.input"

}

},

{

"src":{

"moduleId":2,

"terminal":"modbus.device.output"

},

"tgt":{

"moduleId":0,

"terminal":"modbus.device.output"

}

},

{

"src":{

"moduleId":3,

"terminal":"dataOut"

},

"tgt":{

"moduleId":4,

"terminal":"dataIn"

}

},

{

"src":{

"moduleId":3,

"terminal":"dataIn"

},

"tgt":{

"moduleId":0,

"terminal":"data1"

}

}

]

}

{type=[7], size=3} {type=[4], size=0} - modules

{type=[4], size=0} - properties

{type=[4], size=0} - wires

回答:

您可能会遇到一些错误,这些错误似乎与您对递归或JSON的key->

value性质没有很好的了解以及如何与所使用的库相关联。我根本没有测试过此代码,但它应该可以更好地工作。

void CDriverConfigurator::PrintJSONValue( const Json::Value &val )

{

if( val.isString() ) {

printf( "string(%s)", val.asString().c_str() );

} else if( val.isBool() ) {

printf( "bool(%d)", val.asBool() );

} else if( val.isInt() ) {

printf( "int(%d)", val.asInt() );

} else if( val.isUInt() ) {

printf( "uint(%u)", val.asUInt() );

} else if( val.isDouble() ) {

printf( "double(%f)", val.asDouble() );

}

else

{

printf( "unknown type=[%d]", val.type() );

}

}

bool CDriverConfigurator::PrintJSONTree( const Json::Value &root, unsigned short depth /* = 0 */)

{

depth += 1;

printf( " {type=[%d], size=%d}", root.type(), root.size() );

if( root.size() > 0 ) {

printf("\n");

for( Json::Value::const_iterator itr = root.begin() ; itr != root.end() ; itr++ ) {

// Print depth.

for( int tab = 0 ; tab < depth; tab++) {

printf("-");

}

printf(" subvalue(");

PrintJSONValue(itr.key());

printf(") -");

PrintJSONTree( *itr, depth);

}

return true;

} else {

printf(" ");

PrintJSONValue(root);

printf( "\n" );

}

return true;

}

以上是 遍历JsonCpp中的对象 的全部内容, 来源链接: utcz.com/qa/431290.html

回到顶部