【问题标题】:How to determine if JSON is object or array in cpp, and if object convert it to array?cpp中如何判断JSON是对象还是数组,对象是否转换为数组?
【发布时间】:2015-06-06 05:50:26
【问题描述】:

我一直在寻找,但找到了有关 java 的答案。

很长一段时间以来,我都以数组形式接收 JSON 响应,即使我只有一个响应。 示例:

  {"intervention":

    [
     { 
      "id":"3",
              "subject":"dddd",
              "details":"dddd",
              "beginDate":"2012-03-08T00:00:00+01:00",
              "endDate":"2012-03-18T00:00:00+01:00",
              "campus":
                       { 
                         "id":"2",
                         "name":"paris"
                       }
           }
     ]
}

现在我可以将它作为数组或对象接收。意味着这些[ , ] 不再出现。 正如您可能猜到的那样,当我将它用作数组时,我的代码会崩溃..

我想做这样的事情:

if (parsedJson["intervention"] == jsonObject])
   covertObjectToArray

我试过(伪):

std::string tmp = parsedJson["intervention"].asString()
if (firstChar is "{")
{
   concat : "[ + tmp + ] ";
   parseStringBackToJSon
}

但它崩溃了!

你能帮忙吗?

【问题讨论】:

  • 你使用自己的解析还是 boost::property_tree::json_parser::* ?
  • 我暂时没有使用 boost。但我正在使用 json 解析器(json reader - 将字符串转换为 json)
  • 所以你正在编写自己的解析器?
  • 哦不,它是一个 json 标准库。我希望我没有误会jsoncpp.sourceforge.net/class_json_1_1_value.html
  • 我不熟悉那个库,但它似乎提供了isArrayisObject 函数。您可以探索这些。

标签: c++ arrays json jsonobject json-api


【解决方案1】:

如果我从您最初的问题和 cmets 中得到它,您希望将 JSon 树中的元素(如果它是一个简单对象)转换为包含该对象的数组。我也不熟悉那个库,但对我来说它会是这样的。

Value & v = parseJSon["intervention"];
if(v.isObject()) {
 Value vcopy = v;
 v.clear();
 v.append(vcopy);
}

只是基于 API 文档的幻想代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    相关资源
    最近更新 更多