簡體   English   中英

如何將 JSON 字符串轉換為列表<string>在 flutter 中?</string>

[英]How can i convert a JSON String to List<String> in flutter?

I`m trying to retrieve the content of a table from oracle apex to my flutter app with http.get method, and atribute the values to a class i created. 問題是這個 class 的 3 個屬性需要是 List,所以,當我嘗試 map 它時,它返回這個錯誤:[ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: type ' String' 不是類型轉換中類型“List”的子類型。

這是 JSON:

{
    "items": [
        {
            "id": "1",
            "nome": "Feijão Tropeiro",
            "id_dia_da_semana": "seg",
            "id_categoria": "ga",
            "url_da_imagem": "https://live.staticflickr.com/65535/52180505297_2c23a61620_q.jpg",
            "ingredientes": "vários nadas"
        }
    ],

這是 class:

// ignore_for_file: public_member_api_docs, sort_constructors_first
import 'dart:convert';

class Meal {
  final String id;
  final String descricao;
  final List<String> ingredients;
  final List<String> idDiaSem;
  final List<String> idCategory;
  final String imageUrl;

  const Meal({
    required this.id,
    required this.descricao,
    required this.ingredients,
    required this.idDiaSem,
    required this.idCategory,
    required this.imageUrl,
  });

  Map<String, dynamic> toMap() {
    return <String, dynamic>{
      'id': id,
      'nome': descricao,
      'ingredientes': ingredients,
      'id_dia_da_semana': idDiaSem,
      'id_categoria': idCategory,
      'url_da_imagem': imageUrl,
    };
  }

  factory Meal.fromMap(Map<String, dynamic> map) {
    return Meal(
      id: map['id'] as String,
      descricao: map['nome'] as String,
      ingredients: map['ingredientes'] as List<String>,
      idDiaSem: map['id_dia_da_semana'] as List<String>,
      idCategory: map['id_categoria'] as List<String>,
      imageUrl: map['url_da_imagem'] as String,
    );
  }

  String toJson() => json.encode(toMap());

  factory Meal.fromJson(String source) =>
      Meal.fromMap(json.decode(source) as Map<String, dynamic>);
}

誰能幫我解決這個錯誤? 我試圖轉換它不成功

您不能將它們轉換為List<String>因為它們根本不是列表。 如果您希望它們成為具有單個元素的List ,您可以這樣做:

  ingredients: [map['ingredientes'] as String],
  idDiaSem: [map['id_dia_da_semana'] as String],
  idCategory: [map['id_categoria'] as String],

或確保 JSON 將它們列為列表

{
"items": [
    {
        "id": "1",
        "nome": "Feijão Tropeiro",
        "id_dia_da_semana": ["seg"],
        "id_categoria": ["ga"],
        "url_da_imagem": "https://live.staticflickr.com/65535/52180505297_2c23a61620_q.jpg",
        "ingredientes": ["vários nadas"]
    }
],

嘗試這個:

static List<Meal> fromMap(Map<String, dynamic> map) {
    List<Meal> result = [];
    for(var item in map['items']){
result.add(Meal(
      id: item['id'] as String,
      descricao: item['nome'] as String,
      ingredients: item['ingredientes'] as String,
      idDiaSem: item['id_dia_da_semana'] as String,
      idCategory: item['id_categoria'] as String,
      imageUrl: item['url_da_imagem'] as String,
    ))
}
    return result;
  }
class Meal {
  final String id;
  final String descricao;
  final List<String> ingredients;
  final List<String> idDiaSem;
  final List<String> idCategory;
  final String imageUrl;

  const Meal({
    required this.id,
    required this.descricao,
    required this.ingredients,
    required this.idDiaSem,
    required this.idCategory,
    required this.imageUrl,
  });

  Map<String, dynamic> toMap() {
    return <String, dynamic>{
      'id': id,
      'nome': descricao,
      'ingredientes': ingredients.isNotEmpty ? ingredients[0] : '',
      'id_dia_da_semana': idDiaSem.isNotEmpty ? idDiaSem[0] : '',
      'id_categoria': idCategory.isNotEmpty ? idCategory[0] : '',
      'url_da_imagem': imageUrl,
    };
  }

  factory Meal.fromMap(Map<String, dynamic> map) {
    return Meal(
      id: map['id'] as String,
      descricao: map['nome'] as String,
      ingredients: [map['ingredientes'] as String],
      idDiaSem: [map['id_dia_da_semana'] as String],
      idCategory: [map['id_categoria'] as String],
      imageUrl: map['url_da_imagem'] as String,
    );
  }
}

請試試這個,這可能會有所幫助

當您有一個要解析為列表的字符串時,應該有一個分隔符。 例如,讓我們假設這個字符串:

// The separator here is a comma with a space, like ', '
String str1 = 'ingredient1, ingredient2, bread, idunno, etc';
// The separator here is a simple space, ' '
String str2 = 'ingredient1 ingredient2 bread idunno etc';

一旦確定了字符串中的分隔符,您可能希望使用 dart 中的字符串split方法,指定分隔符。 例如:

// Separator is a simple comma with no spaces, ','
String str1 = 'ingredient1,ingredient2,bread,idunno,etc';
// Splits the string into array by the separator
List<String> strList = str1.split(','); 
// strList = ['ingredient1', 'ingredient2', 'bread', 'idunno', 'etc'];

More information on the split dart method at https://api.dart.dev/stable/2.14.4/dart-core/String/split.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM