因此,我有两个具有不同字段的JSON文件.

{
  "password": { "length": 5, "reset": true},
}
"dataSettings": {
    "enabled": true,
    "algorithm": { "djikstra": true },
    "country": { "states": {"USA": true, "Romania": false}}
}

我希望能够使用相同的代码来打印出JSON中的所有嵌套字段及其值.

我try 使用[JSON to DART转换程序包](https://javiercbk.github.io/json_to_dart/.

然而,似乎使用它可以使它成为硬编码的所有值,因为我将通过执行

item.dataSettings.country.states.USA

这是一种硬编码的方法.相反,我想要一种循环遍历所有嵌套的值并打印出来的方法,而不必自己写出来.

推荐答案

您可以使用‘DART:CONVERT’将JSON字符串转换为Map<String, dynamic>类型的对象:

import 'dart:convert';

final jsonData = "{'someKey' : 'someValue'}";
final parsedJson = jsonDecode(jsonData);

然后,您可以像遍历任何其他词典一样重复此词典:

parsedJson.forEach((key, value) {

  // ... Do something with the key and value

));

对于列出所有键和值的用例,递归实现可能是最容易实现的:

void printMapContent(Map<String, dynamic> map) {
   parsedJson.forEach((key, value) {
       print("Key: $key");  
       if (value is String) {
           print("Value: $value");
       } else if (value is Map<String, dynamic>) {
           // Recursive call
           printMapContent(value);
       }
   )); 
}

但请注意,这种类型的递归JSON解析通常是不推荐的,因为它非常无 struct 且容易出错.您应该知道来自后端的数据 struct 是什么样子,并将该数据解析为 struct 良好的对象. 在那里,您还可以执行输入验证并验证数据是否合理.

你可以阅读"在DART中进行JSON解析"的主题,例如在this blog article中.

Json相关问答推荐

JOLT转换过滤出特定值/对象

Golang JSON Date Tim.Date()测试请求

如何在Gatsby/Reaction中获取JSON-File子 node

我发现GoFr响应总是包含在数据字段中,如何返回自定义响应?

Postgres Select json数组并重新映射属性名称

如何使用模式注册中心创建从主题中取消本地化的ks qlDB表?

Golang jsonrpc2 服务器在哪里监听?

使用 jq,如何将两个属性构成键的对象数组转换为对象的索引对象?

使用 jq 从字符串列表开始创建对象

JOLT 转换 - 删除 JSON 数组中的空 node

在 rust 中从 API 反序列化 serde_json

在 json 嵌入的 YAML 文件中 - 使用 Python 仅替换 json 值

在 Perl Mojolicious 中呈现 JSON 时防止转义字符

json.decoder.JSONDecodeError:期望值:第 1 行第 1 列(字符 0)

反序列化大型 json 对象的 JsonMaxLength 异常

将带有数据和文件的 JSON 发布到 Web Api - jQuery / MVC

在 JSON 反序列化期间没有为System.String类型定义无参数构造函数

消息通知产生此内容无法显示

在 .NET 中缩小缩进的 JSON 字符串

按键值过滤 JSON