我正在使用SQFlite在本地存储数据,我有一个表,其中有一个名为“ json”的字段,该字段的类型为TEXT,并存储一个转换为String的json,例如:'{name:Eduardo,年龄:23岁,性别:男}'。
到目前为止,一切正常。
但是随后我需要从数据库中查询此信息,以及如何将其以文本类型格式存储,Flutter会将其识别为字符串。我不知道如何将其转换回对象。 我知道在存储在json中的信息始终遵循相同结构的情况下,我可以构建一个函数来解决此问题。但就我而言,json包含的信息将是可变的。
有没有办法解决这个问题?
答案 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);