如何为SQLite导出数据的键添加引号以适配API请求格式?
如何给SQLite查询结果的键添加双引号以适配API格式?
嘿,我来帮你搞定这个问题!你现在遇到的情况是:从SQLite查出来的数据,打印出来是键不带双引号的格式(比如{count: 3, minced: 0...}),但API要求的是标准JSON格式(键带双引号,比如{"size_id":59,"count":2...})。其实解决起来很简单,核心就是把Dart的Map列表正确序列化为标准JSON字符串。
问题根源
你看到的不带双引号的格式,其实是Dart中Map对象调用toString()后的输出,并不是标准的JSON。而API需要的是符合JSON规范的数据,这时候就需要用Dart自带的序列化工具来处理。
具体解决方案
我们可以使用dart:convert库中的jsonEncode方法,它会自动把Dart的List<Map>转换成键带双引号的标准JSON字符串。
方法1:在调用数据时进行序列化
先获取SQLite的数据,再转成JSON:
// 记得导入dart:convert库 import 'dart:convert'; import 'package:http/http.dart' as http; // 如果用http发请求的话 // 示例:发送数据到API的方法 Future<void> sendCartDataToApi() async { DatabaseHelper dbHelper = DatabaseHelper(); // 获取数据库中的购物车数据(注意类型转换) List<Map<String, dynamic>> cartData = await dbHelper.getCartProduct() as List<Map<String, dynamic>>; // 关键一步:序列化为标准JSON字符串 String requestBody = jsonEncode(cartData); // 发送POST请求到API final response = await http.post( Uri.parse('你的API接口地址'), headers: {'Content-Type': 'application/json'}, // 必须指定JSON格式头 body: requestBody, ); // 处理API响应 if (response.statusCode == 200) { print('数据发送成功啦!'); } else { print('发送失败,状态码:${response.statusCode}'); } }
方法2:在DatabaseHelper中新增方法直接返回JSON
如果经常需要用这个格式,也可以在你的DatabaseHelper类里加一个方法,直接返回序列化后的JSON字符串:
// 先导入dart:convert import 'dart:convert'; class DatabaseHelper { // ... 其他现有代码 ... Future<String> getCartProductAsJson() async { var dbProduct = await db; var result = await dbProduct.rawQuery("SELECT count, minced, category_id, size_id, chops_id, cookie_id, choole, notes FROM Product"); // 直接序列化并返回 return jsonEncode(result); } }
调用的时候就更简单了:
String jsonData = await dbHelper.getCartProductAsJson(); // 直接把jsonData作为请求体发送即可
为什么这能解决问题?
jsonEncode会严格按照JSON规范处理数据:
- 自动给所有键加上双引号
- 处理null值(比如你的
chops_id: null会转成"chops_id": null) - 处理字符串类型的字段(比如
notes: bzbznzjz会转成"notes": "bzbznzjz")
这样生成的JSON格式就完全和API要求的一致了。
内容的提问来源于stack exchange,提问作者Mo'men L-Ashmawy
相关产品推荐
相关产品推荐

