Dart:如何将不带引号的json字符串转换为Map

ilmyapht  于 2023-01-28  发布在  其他
关注(0)|答案(2)|浏览(221)

如何将不带引号json字符串转换为Map。
我在https://dartpad.dev/上尝试了以下代码,但不起作用:

import 'dart:convert';

void main() async {
  final String raw = "{data: {name: joy, tags: aa,bb, city: jakarta}}";
  print('Test 1: $raw');
  
  final Map<dynamic, dynamic> result = json.decode(raw);
  print('Test 2: $result');
}

这是上面代码的错误:

Test 1: {data: {name: joy, tags: aa,bb, city: jakarta}}
Uncaught Error: FormatException: SyntaxError: Expected property name or '}' in JSON at position 1

而我知道这一点是因为我的json是无效的,如何将我的不带引号的json字符串转换为带引号的json字符串?
实际结果为:

{data: {name: joy, tags: aa,bb, city: jakarta}}

预期结果为:

{"data": {"name": "joy", "tags": "aa,bb", "city": "jakarta"}}
piah890a

piah890a1#

我用下面的代码修复它,参考这个答案:https://stackoverflow.com/a/71025841/21092577

import 'dart:convert';

void main() async {
  
  String raw = "{data: {name: joy, tags: aa,bb, city: jakarta}}";
  print("Test 0: $raw");
  
  String jsonString = _convertToJsonStringQuotes(raw: raw);
  print("Test 1: $jsonString");
  
  final Map<dynamic, dynamic> result = json.decode(jsonString);
  print('Test 2: $result');
  
}

String _convertToJsonStringQuotes({required String raw}) {
    String jsonString = raw;

    /// add quotes to json string
    jsonString = jsonString.replaceAll('{', '{"');
    jsonString = jsonString.replaceAll(': ', '": "');
    jsonString = jsonString.replaceAll(', ', '", "');
    jsonString = jsonString.replaceAll('}', '"}');

    /// remove quotes on object json string
    jsonString = jsonString.replaceAll('"{"', '{"');
    jsonString = jsonString.replaceAll('"}"', '"}');

    /// remove quotes on array json string
    jsonString = jsonString.replaceAll('"[{', '[{');
    jsonString = jsonString.replaceAll('}]"', '}]');

    return jsonString;
  }
cngwdvgl

cngwdvgl2#

您的json无效,请使用https://jsonlint.com/进行验证
json应该是

{
    "data": {
        "name": "joy",
        "tags": "aa,bb",
        "city": "Jakarta"
    }
}

DEMO

import 'dart:convert';

void main() async {
  final String raw = "{" +
"   \"data\": {" +
"       \"name\": \"joy\"," +
"       \"tags\": \"aa,bb\"," +
"       \"city\": \"Jakarta\"" +
"   }" +
"}";

  Map<dynamic, dynamic> resultMap = json.decode(raw);
  print('Test 3: $resultMap');
}

相关问题