Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart从base64转换整个json树_Json_Dart_Flutter_Base64 - Fatal编程技术网

Dart从base64转换整个json树

Dart从base64转换整个json树,json,dart,flutter,base64,Json,Dart,Flutter,Base64,我有json,其中每个值都编码为base64。我想遍历整棵树,解码每一个值。这需要是自动的。代码中不能指定json键。它需要自行下降。我该怎么做呢 这就是我目前所拥有的 Map<String, dynamic> parseJson(String response) { var data = json.decode(response); // Here I need to decode from base64 return data; } 谢谢 这就是使用base64

我有json,其中每个值都编码为base64。我想遍历整棵树,解码每一个值。这需要是自动的。代码中不能指定json键。它需要自行下降。我该怎么做呢

这就是我目前所拥有的

Map<String, dynamic> parseJson(String response) {
  var data = json.decode(response);

  // Here I need to decode from base64

  return data;
}

谢谢

这就是使用
base64编解码器
的方法,如果使用
utf8.decode
则不会丢失编码

  import 'dart:convert';

  Base64Codec base64 = const Base64Codec();
Map<String, dynamic> parseJson(String response) {
    final data = json.decode(response);

    // Here I need to decode from base64
    final dataTitle = data["app_title"];
    final dataColor = data["app_color"];


    //decode base64
    final dataTitle64 = base64.decode(dataTitle);
    final dataColor64 = base64.decode(dataColor);


    //Strings
    String stringTitle = utf8.decode(dataTitle64);
    String stringColor = utf8.decode(dataColor64);


    //content array
    List<Item> list = List();
    for (Map<String, dynamic> value in data["app_tabs"]){
       final mapTitle = base64.decode(value["title"]);
       final mapContent = base64.decode(value["content"]);
       String stringTitle = utf8.decode(mapTitle);
       String stringContent = utf8.decode(mapContent);
       list.add(Item(stringTitle, stringContent));
    }

    //now you have your list of items

    for(Item item in list){
       print("ITEM: ${item.title} .. ${item.content}");
    }
    //return that list if you want


    return data;
  }
导入'dart:convert';
Base64Codec base64=常量Base64Codec();
映射解析JSON(字符串响应){
最终数据=json.decode(响应);
//这里我需要从base64解码
最终数据标题=数据[“应用程序标题”];
最终数据颜色=数据[“应用程序颜色”];
//解码base64
最终数据标题64=base64.decode(数据标题);
final dataColor64=base64.decode(dataColor);
//弦
字符串stringTitle=utf8.decode(数据标题64);
字符串stringColor=utf8.decode(dataColor64);
//内容数组
List=List();
用于(数据[“应用程序选项卡”]中的地图值){
最终mapTitle=base64.解码(值[“title”]);
最终mapContent=base64.decode(值[“content”]);
字符串stringTitle=utf8.decode(映射标题);
字符串stringContent=utf8.decode(mapContent);
列表。添加(项目(stringTitle、stringContent));
}
//现在您有了项目列表
用于(列表中的项目){
打印(“项目:${ITEM.title}..${ITEM.content}”);
}
//如果需要,请返回该列表
返回数据;
}

最后我自己解决了!这是最终代码:

import 'dart:async';
import 'dart:convert';

import 'package:flutter/foundation.dart';
import 'package:http/http.dart' as http;


Future<Map<String, dynamic>> fetchJson() async {
  final res = await http.get('http://app.roboro.se/json/001');

  if (res.statusCode == 200) {
    return compute(parseJson, res.body);
  } else {
    throw Exception('Failed to load json');
  }
}


Map<String, dynamic> parseJson(String response) {    
  return walkJson(json.decode(response));
}


Map<String, dynamic> walkJson(data) {
  data.forEach((key, value) {
    if (value is List == false) {
      data[key] = base64Decode(value);  
    } else {
      value.forEach((item) => item = walkJson(item));
    }
  });

  return data;
}


String base64Decode(String encoded) {
  return utf8.decode(base64.decode(encoded));
}
导入'dart:async';
导入“dart:convert”;
进口“包装:颤振/基础.dart”;
将“package:http/http.dart”导入为http;
Future fetchJson()异步{
final res=等待http.get('http://app.roboro.se/json/001');
如果(res.statusCode==200){
返回compute(parseJson,res.body);
}否则{
抛出异常(“加载json失败”);
}
}
映射解析JSON(字符串响应){
返回walkJson(json.decode(response));
}
地图(数据){
data.forEach((键,值){
if(值为List==false){
数据[键]=base64解码(值);
}否则{
value.forEach((项目)=>item=walkJson(项目));
}
});
返回数据;
}
字符串base64解码(字符串编码){
返回utf8.decode(base64.decode(encoded));
}

将很有帮助:@Blasanka,用于编码否?检查-我不能像那样手动操作,这将是大量数据。但是谢谢你的解码!什么意思?在循环中唯一可以做的就是这个var:data[“app_tabs”]不,我想迭代整个地图。此json不是最终的,手动循环将不是一个好的解决方案。您必须提取地图的每个值,您可以迭代“app_tabs”数组,因为“它是一个数组”,提取地图的每个值后,您必须解码每个值,因为它位于base64,您的地图不在base64,但每个值都是。:)你明白吗?你好像不明白我在说什么。它需要是自动的。代码中不能包含文本“应用程序选项卡”。我需要它是一种娱乐。
import 'dart:async';
import 'dart:convert';

import 'package:flutter/foundation.dart';
import 'package:http/http.dart' as http;


Future<Map<String, dynamic>> fetchJson() async {
  final res = await http.get('http://app.roboro.se/json/001');

  if (res.statusCode == 200) {
    return compute(parseJson, res.body);
  } else {
    throw Exception('Failed to load json');
  }
}


Map<String, dynamic> parseJson(String response) {    
  return walkJson(json.decode(response));
}


Map<String, dynamic> walkJson(data) {
  data.forEach((key, value) {
    if (value is List == false) {
      data[key] = base64Decode(value);  
    } else {
      value.forEach((item) => item = walkJson(item));
    }
  });

  return data;
}


String base64Decode(String encoded) {
  return utf8.decode(base64.decode(encoded));
}