我有一个JSON字符串
String str = '{ "name":"John", "age":31, "city":"New York" }'
在上面的字符串中, city 是一个可选键,可能不会出现在JSON数据中。
我解码了json字符串
var jsonResponse = json.decode(str);
我想知道 jsonResponse 对象是否存在 city 键。
答案 0 :(得分:5)
jsonResponse.containsKey("key");
答案 1 :(得分:1)
我不确定解决方案有多好,但它正在发挥作用。
String str = '{ "name":"John", "age":31, "city":"New York" }';
Map<String, String> jsonResponse = json.decode(str);
if (jsonResponse.containsKey('city')){
// do your work
}
不是在 var 中捕获JSON对象,而是将其捕获到
中Map<String, String>
or
Map<String, Object> //if value is again an object
答案 2 :(得分:0)
如果您的json像您的示例一样简单,您可以直接使用地图检查它:
String str = '{ "name":"John", "age":31, "city":"New York" }';
var jsonResponse = json.decode(str);
print('City is ${jsonResponse["city"] ?? "empty"}');
更新:谢谢lrn。我提出了你的建议。
答案 3 :(得分:0)
json.decode
的结果是Map<String, dynamic>
,其中包含源中每个键/值对的条目。
作为Map
,您可以使用Map.containsKey测试是否存在密钥。您也可以使用"city"
键进行查找,看看是否得到null
。在某些情况下,直接使用null
值直接比检查是否有某些内容更方便,但这完全取决于您要做的事情。
var map = jsonDecode(str);
bool containsCity = map.containsKey("city");
String city = map["city"];
if (city == null) // no city ...
// Use the null directly if you just replace it with a default.
print("${map["name"]} from ${map["city"] ?? "somewhere"}");
// Use a test if you want to do something different if it's there.
print(map["name"] + (city != null ? " from $city" : "");
map["city"] == null
测试与原始来源包含map.containsKey("city")
对的"city": null
不同。您需要决定是否发生这种情况,如果发生,您需要如何处理它。在许多情况下,它可能是一个错误,应该被视为没有"city"
条目,所以我通常更喜欢使用map["city"] == null
测试{{1} }}