将 Map 转换为 json 字符串颤振

Posted

技术标签:

【中文标题】将 Map 转换为 json 字符串颤振【英文标题】:Convert Map to json String flutter 【发布时间】:2021-10-26 00:09:19 【问题描述】:

我是 dart 新手,尝试将 Map 转换为 sqflite 的 json 字符串,json.encoderjsonEncode 不起作用。我尝试使用json_serializable,但无法运行build_runner,使用元数据和分析器进行了一系列操作。

转换变体时出现问题,应该如下所示:

"variants": 
    "iphone 6": "1": "8", "2": "6",
    "xiaomi mi6": "1": "8", "3": "5",
    "samsung A6": "1": "8"
   

它的样子:

 variants: 
    iphone 6: 1: 8, 2: 6,
    xiaomi mi6: 1: 8, 3: 5,
    samsung A6: 1: 8
   

SQL函数:

Future<void> addToCart(List<List<TextEditingController>> controllers, Item item) async 
     Map<String, Map<int, String>> resultMap = Map();
    var list = item.variants.values.toList();
    var models = item.variants.keys.toList();
    for (int i = 0; list.length > i; i ++) 
      var variantsName = list.elementAt(i).toList();
      var modelsName = models.elementAt(i);
      Map<int, String> values = Map();
      for (int ind = 0; variantsName.length > ind; ind ++) 
        String reasultC = controllers[i].elementAt(ind).text;
        if (reasultC.isNotEmpty && int.parse(reasultC) > 0) 
          values[ind + 1] = reasultC;
        
      
      if (!resultMap.containsKey(modelsName) && values.isNotEmpty) 
        resultMap[modelsName] = values;
      
    

    db = await openDatabase("$_dbName.db");
    db.execute('''
    CREATE TABLE IF NOT EXISTS $_dbName(
        id INTEGER PRIMARY KEY,
        idItem TEXT,
        title TEXT,
        variants TEXT,
        images TEXT)
    ''');

    var end = Cart(idItem: item.id, title: item.title, variants: resultMap, images: item.images).toJson();
    print(end);
    
    await db.insert(_dbName, end);
    await db.close();

class Cart 
  String idItem;
  String title;
  Map<String, dynamic> variants;
  List<String> images;

  Cart(this.idItem, this.title, this.variants, this.images);

  Map<String, dynamic> toJson() =>
      <String, dynamic>
        'idItem': this.idItem,
        'title': this.title,
        'variants': jsonEncode(this.variants), <= NoSuchMethodError: Class '_InternalLinkedHashMap<int, String>' has no instance method 'toJson'. Receiver: _LinkedHashMap len:1 T
        'images': json.encode(this.images)
      ;

谢谢。

【问题讨论】:

有什么问题?是什么让你说它不起作用?它生成的 JSON 是什么样子的? @stacktrace2234 我需要将 map 'variants' 转换为 json 字符串,添加它的外观和外观 你试过'variants': jsonEncode(this.variants)吗? @stacktrace2234 我做了 这不是你想要达到的目标吗:i.imgur.com/jiPl3WT.png ? 【参考方案1】:

我发现一个错误,这是一个非常幼稚的错误,将地图类型从Map &lt;String, Map &lt;int, String&gt;更改为Map &lt;String, Map &lt;String, String &gt;&gt;

Map<String, Map<String, String>> resultMap = Map();
    var list = item.variants.values.toList();
    var models = item.variants.keys.toList();
    for (int i = 0; list.length > i; i ++) 
      var variantsName = list.elementAt(i).toList();
      var modelsName = models.elementAt(i);
      Map<String, String> values = Map();
      for (int ind = 0; variantsName.length > ind; ind ++) 
        String reasultC = controllers[i].elementAt(ind).text;
        if (reasultC.isNotEmpty && int.parse(reasultC) > 0) 
          values["$ind + 1"] = reasultC;
        
      
      if (!resultMap.containsKey(modelsName) && values.isNotEmpty) 
        resultMap[modelsName] = values;
      
    

【讨论】:

【参考方案2】:

这与json.encode 一起正常工作:

import 'dart:convert';

void main() 
  try 
  var obj = "variants": 
    "iphone 6": "1": "8", "2": "6",
    "xiaomi mi6": "1": "8", "3": "5",
    "samsung A6": "1": "8"
   ;
  String str = json.encode(obj);
  print(str);
   catch(e) 
    print(e);
  

DartPad link

【讨论】:

我的地图没有引号

以上是关于将 Map 转换为 json 字符串颤振的主要内容,如果未能解决你的问题,请参考以下文章

如何将Map转化为json字符串

Java中如何把字符串转换成map

如何使用 Jackson JSON 将 JSON 字符串转换为 Map<String, String>

java如何将json的数据转换为map或者list类型的?

如何把map转成json字符串

如何将一个map 转换成json数据