在省道中将字符串转换为映射

我想把字符串转换为 map。

String value = "{first_name : fname,last_name : lname,gender : male, location : { state : state, country : country, place : place} }"

进入

Map = {
first_name : fname,
last_name : lname,
gender : male,
location = {
state : state,
country : country,
place : place
}
}

如何将字符串转换为由 string、 int、 object 和 boolean 组成的 map<String, dynamic>

我希望将字符串保存到一个文件中,并从该文件中获取数据。

112950 次浏览

That's not possible.

If you can change the string to valid JSON, you can use

import 'dart:convert';
...
Map valueMap = json.decode(value);
// or
Map valueMap = jsonDecode(value);

The string would need to look like

{"first_name" : "fname","last_name" : "lname","gender" : "male", "location" : { "state" : "state", "country" : "country", "place" : "place"} }

create two objects

class User {
final String firstName;
final String lastName;
final String gender;
final location;


User({
this.firstName,
this.lastName,
this.gender,
this.location,
});


User.fromJson(Map json)
: firstName = json['firstName'],
lastName = json['lastName'],
gender = json['gender'],
location = Location.fromJson(json['location']);
}


class Location {
final String state;
final String country;
final String place;


Location({
this.state,
this.country,
this.place,
});


Location.fromJson(Map json)
: state = json['state'],
country = json['country'],
place = json['place'];
}

then use it like this

var user = User.fromJson(value);
print(user.firstName);

or convert it to list like this

var user = User.fromJson(value).toList();

You would have to change the way you create the string.

I'm guessing you are creating the string using the yourMap.toString() method. You should rather use json.encode(yourMap), which converts your map to valid JSON, which you can the parse with json.decode(yourString).

Make a wrapper class for the location where you define the methods fromMap, toMap

you can do like this ->

import 'dart:convert'; ...

if your data like this ** {'bus1':'100Tk','bus2':'150TK','bus3':'200TK'}

**;

then you can do like this ->

Map valueMap = json.decode(value);

// or

Map valueMap = jsonDecode(value);

or if like this ->var data = {'1':'100TK','2':'200TK','3':'300TK'};

var dataSp = data.split(',');
Map<String,String> mapData = Map();
dataSp.forEach((element) => mapData[element.split(':')[0]] = element.split(':')[1]);

Note: Map first value was Int that's why I did that.

Use below method
just pass String json data it will give Map data

jsonStringToMap(String data){
List<String> str = data.replaceAll("{","").replaceAll("}","").replaceAll("\"","").replaceAll("'","").split(",");
Map<String,dynamic> result = {};
for(int i=0;i<str.length;i++){
List<String> s = str[i].split(":");
result.putIfAbsent(s[0].trim(), () => s[1].trim());
}
return result;
}