Flutter:将字符串转换为Map

时间:2020-11-05 23:59:32

标签: json sqlite flutter sqflite

我正在使用SQFlite在本地存储数据,我有一个表,其中有一个名为“ json”的字段,该字段的类型为TEXT,并存储一个转换为String的json,例如:'{name:Eduardo,年龄:23​​岁,性别:男}'。

到目前为止,一切正常。

但是随后我需要从数据库中查询此信息,以及如何将其以文本类型格式存储,Flutter会将其识别为字符串。我不知道如何将其转换回对象。 我知道在存储在json中的信息始终遵循相同结构的情况下,我可以构建一个函数来解决此问题。但就我而言,json包含的信息将是可变的。

有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:2)

您可以简单地使用dart:convert包中的json.decode函数。

示例:


import 'dart:convert';

main() {
  final jsonString = '{"key1": 1, "key2": "hello"}';
  final decodedMap = json.decode(jsonString);

  // we can now use the decodedMap as a normal map
  print(decodedMap['key1']); 
}

查看这些链接以获取更多详细信息

https://api.dart.dev/stable/2.10.3/dart-convert/json-constant.html

https://api.dart.dev/stable/2.4.0/dart-convert/dart-convert-library.html

答案 1 :(得分:1)

如果您遇到json键没有引号的问题,请尝试以下代码,将未加引号的字符串转换为带引号的字符串,然后对其进行解码,它可以100%工作




final string1 = '{name : "Eduardo", numbers : [12, 23], country: us }';

// remove all quotes from the string values
final string2=string1.replaceAll("\"", "");

// now we add quotes to both keys and Strings values
final quotedString = string2.replaceAllMapped(RegExp(r'\b\w+\b'), (match) {
  return '"${match.group(0)}"';
});

// decoding it as a normal json
  final decoded = json.decode(quotedString);
  print(decoded);