在JSON对象中查找密钥存在

时间:2018-05-30 03:49:06

标签: dart flutter

我有一个JSON字符串

String str = '{ "name":"John", "age":31, "city":"New York" }'

在上面的字符串中, city 是一个可选键,可能不会出现在JSON数据中。

我解码了json字符串

var jsonResponse = json.decode(str);

我想知道 jsonResponse 对象是否存在 city 键。

4 个答案:

答案 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} }}