如何从JSON对象中获取格式化/缩进的JSON字符串?

v8wbuo2f  于 11个月前  发布在  其他
关注(0)|答案(3)|浏览(135)

使用dart:convert,我可以得到一个未缩进的字符串。

var unformattedString = JSON.encode(jsonObject);

字符串
如何将JSON对象转换为缩进字符串?

w1e3prcc

w1e3prcc1#

一种方法是创建一个JSONEncoder.withIndent示例。

String getPrettyJSONString(jsonObject){
   var encoder = new JsonEncoder.withIndent("     ");
   return encoder.convert(jsonObject);
}

字符串

uyto3xhc

uyto3xhc2#

用这个吧,对我有用

String prettyJson(dynamic json) {
    var spaces = ' ' * 4;
    var encoder = JsonEncoder.withIndent(spaces);
    return encoder.convert(json);
}

字符串

p1tboqfb

p1tboqfb3#

虽然现有的答案涵盖了基础知识,但如果您正在处理包含枚举或日期等复杂值的Map,那么这里有一个有效的方法:
1.准备Map:使用flutter_helper_utils包中的makeMapEncodable(map)。该函数确保所有map值都兼容JSON,这对于复杂数据类型至关重要。
1.生成JSON:使用JsonEncoder将准备好的map转换为缩进的JSON字符串。

import 'dart:convert';
import 'package:flutter_helper_utils/flutter_helper_utils.dart';

final yourMap = {
  'id': 2,
  'firstName': 'John',
  'lastName': 'Doe',
  'timePeriod': TimePeriod.week, // Example enum.
  'date': DateTime.now(),
};

final encodableMap = makeMapEncodable(yourMap);
final json = const JsonEncoder.withIndent('  ').convert(encodableMap);
print(json);

字符串

生成JSON

{
  "id": 2,
  "firstName": "John",
  "lastName": "Doe",
  "timePeriod": "week",
  "date": "2024-01-06 12:31:13.915016"
}

**为什么使用makeMapEncodable?**它处理Map以处理非标准的JSON类型(枚举,DateTime等),确保没有运行时错误和正确格式化的JSON输出。

有关更多实用程序,请查看flutter_helper_utils文档here

相关问题