如何在Flutter中将字符串转换为JSON

4

我的字符串

{id: produk12549, nama: Abcd, url: myUrl}

如何更改为:
{"id": "produk12549", "nama": "Abcd", "url": "myUrl"}

这个问题已经在这里得到了回答:https://stackoverflow.com/a/64707588/17769156 - ManuH68
我尝试了,但是出现了这样的错误: 格式异常(FormatException:意外字符(在第38个字符处) {"id": "produk12549", "nama": "ASOY" "ROYAL" "BIRU" "100gr" "TG" "pn", "url... - user18223348
1
你用哪个字符串尝试了?请分享你正在尝试执行的代码,最好是一个可以在Dartpad中运行并修复的片段。 - ManuH68
3个回答

2
import 'dart:convert';

void main() {  
  Map<String, dynamic> result = jsonDecode("""{"id": "produk12549", "nama": "Abcd", "url": "myUrl"}""");
  print(result);
}

我是指将这个 {id: produk12549, nama: Abcd, url: myUrl} 改为 {"id": "produk12549", "nama": "Abcd", "url": "myUrl"}。 - user18223348

1
您可以使用字符串操作将其转换为有效的json字符串,然后对其进行编码。例如:
import 'dart:convert';
void main() {
  var s = "{id: produk12549, nama: Abcd, url: myUrl}";
  
  var kv = s.substring(0,s.length-1).substring(1).split(",");
  final Map<String, String> pairs = {};
  
  for (int i=0; i < kv.length;i++){
    var thisKV = kv[i].split(":");
    pairs[thisKV[0]] =thisKV[1].trim();
  }
  
  var encoded = json.encode(pairs);
  print(encoded);
}

0
void main(List<String> args) {
  const str = '{id: produk12549, nama: Abcd, url: myUrl}';
  var entries = str
    .substring(1,str.length-1)
    .split(RegExp(r',\s?'))
    .map((e) => e.split(RegExp(r':\s?')))
    .map((e) => MapEntry(e.first, e.last));
  var result = Map.fromEntries(entries);

  print(result);
}

输出:

{id: produk12549, nama: Abcd, url: myUrl}

我需要像这样的结果 {"id": "produk12549", "nama": "Abcd Bla Bla", "url": "myUrl"}。 - user18223348
兄弟,输出的类型是Map<String, String>,也就是说,键和值都是String类型。你的问题是如何将String类型的值转换为Map<String,String>类型的值。但如果你需要(这很少见)显式地显示字符",那么请使用以下代码:.map((e) => MapEntry('"'+e.first+'"', '"'+e.last+'"')) - Ουιλιαμ Αρκευα
如果数组值像 {urls:[one,two]} 这样,或者值包含由空格分隔的两个单词,例如 {name: "This is my name"},该怎么办?谢谢。 - Nux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接