【问题标题】:Convert Map to json String flutter将 Map 转换为 json 字符串颤振
【发布时间】: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 ?

标签: json flutter dictionary dart encode


【解决方案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

    【讨论】:

    • 我的地图没有引号
    猜你喜欢
    • 2023-04-07
    • 2020-02-08
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 2019-10-19
    • 2019-08-04
    相关资源
    最近更新 更多