Convert Map to json String flutter
3,705
Solution 1
I found an error and it is a very childish error, changed the map type from Map <String, Map <int, String>
to Map <String, Map <String, String >>
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;
}
}
Solution 2
This is working correctly with 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);
}
}
Author by
Vasya2014
Updated on December 07, 2022Comments
-
Vasya2014 over 1 year
I am new to dart, trying to convert Map to json String for sqflite,
json.encoder
andjsonEncode
doesn't work. i tried to usejson_serializable
but couldn't runbuild_runner
, did a bunch of manipulations with meta and analyzer.the problem occurs when converting Variants, this is should look like:
"variants": { "iphone 6": {"1": "8", "2": "6"}, "xiaomi mi6": {"1": "8", "3": "5"}, "samsung A6": {"1": "8"} }
How it is look like:
variants: { iphone 6: {1: 8, 2: 6}, xiaomi mi6: {1: 8, 3: 5}, samsung A6: {1: 8} }
SQL func:
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) }; }
Thanks.
-
stacktrace2234 over 2 yearsWhat is the problem? What makes you say it does not work? How the JSON it generates look like?
-
Vasya2014 over 2 years@stacktrace2234 I need convert map 'variants' to json string, added how it looks and how it should look
-
stacktrace2234 over 2 yearsDid you try
'variants': jsonEncode(this.variants)
? -
Vasya2014 over 2 years@stacktrace2234 I did
-
stacktrace2234 over 2 yearsIsn't this what you try to achieve: i.imgur.com/jiPl3WT.png ?
-
Vasya2014 over 2 years@stacktrace2234 is it
-
Vasya2014 over 2 yearsI get error when use encode: NoSuchMethodError: Class '_InternalLinkedHashMap<int, String>' has no instance method 'toJson'. Receiver: _LinkedHashMap len:1 T
-
stacktrace2234 over 2 yearsEdit the question with the new code.
-
Vasya2014 over 2 years@stacktrace2234 I did it
-
-
Vasya2014 over 2 yearsmy map is without quotes