| 58 | // |
| 59 | // |
| 60 | Variant convertJsonValueToVariant(const Json::Value& value) |
| 61 | { |
| 62 | switch (value.type()) |
| 63 | { |
| 64 | case Json::ValueType::nullValue: |
| 65 | return {}; |
| 66 | case Json::ValueType::intValue: |
| 67 | return Variant(value.asLargestInt()); |
| 68 | case Json::ValueType::uintValue: |
| 69 | return Variant(value.asLargestUInt()); |
| 70 | case Json::ValueType::realValue: |
| 71 | error::TypeError(SL, "Variant doesn't support double type").throwException(); |
| 72 | case Json::ValueType::stringValue: |
| 73 | return Variant(value.asString()); |
| 74 | case Json::ValueType::booleanValue: |
| 75 | return Variant(value.asBool()); |
| 76 | case Json::ValueType::arrayValue: |
| 77 | { |
| 78 | Sequence seq = Sequence(); |
| 79 | Json::ArrayIndex nSize = value.size(); |
| 80 | for (Json::ArrayIndex i = 0; i < nSize; ++i) |
| 81 | seq.insert(i, convertJsonValueToVariant(value[i])); |
| 82 | return seq; |
| 83 | } |
| 84 | case Json::ValueType::objectValue: |
| 85 | { |
| 86 | Variant dict = Dictionary(); |
| 87 | Json::Value::Members members(value.getMemberNames()); |
| 88 | for (auto iter = members.begin(); iter != members.end(); ++iter) |
| 89 | { |
| 90 | const std::string& sKey = *iter; |
| 91 | dict.put(sKey, convertJsonValueToVariant(value[sKey])); |
| 92 | } |
| 93 | return deserializeObject(dict); |
| 94 | } |
| 95 | } |
| 96 | error::TypeError(SL, "Unsupported JSON value type").throwException(); |
| 97 | } |
| 98 | |
| 99 | // |
| 100 | // |
no test coverage detected