Сериализация до json - PullRequest
3 голосов
/ 05 мая 2020

Я пытаюсь преобразовать список типа Response в json, но не получаю его.

Это мой список объектов:

enter image description here

Я хочу json вот так:

{
"preguntas": [
    {
        "id": "7d0e0584-3049-4814-b127-0faa02b455b4",
        "encuesta": null,
        "orden": 1,
        "descripcion": "Dificultad para respirar de moderada a grave (no puede decir frases completas)",
        "respuestas": [],
        "obligatoria": true,
        "estado": false,
        "fechaCreacion": null,
        "responsableCreacion": null,
        "fechaModificacion": null,
        "responsableModificacion": null
    },
    {
        "id": "9809e985-2d1f-4f79-a5b9-da6731e14012",
        "encuesta": null,
        "orden": 2,
        "descripcion": "Fiebre o sentirse afiebrados (escalofríos, sudoración)",
        "respuestas": [],
        "obligatoria": true,
        "estado": false,
        "fechaCreacion": null,
        "responsableCreacion": null,
        "fechaModificacion": null,
        "responsableModificacion": null
    }
]

}

Я новичок во Flutter, пожалуйста, если кто-то мне поможет, я очень благодарен

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Вы можете скопировать и вставить полный код ниже
Вы можете использовать полное определение класса модели Payload ниже и выполнить синтаксический анализ с помощью payloadToJson
Этот пример кода создает объект Payload с вашей строкой json и преобразовать обратно в json строку

фрагмент кода

String payloadToJson(Payload data) => json.encode(data.toJson());
...
String str = payloadToJson(payload);
print(str);

вывод

{"preguntas":[{"id":"7d0e0584-3049-4814-b127-0faa02b455b4","encuesta":null,"orden":1,"descripcion":"Dificultad para respirar de moderada a grave (no puede decir frases completas)","respuestas":[],"obligatoria":true,"estado":false,"fechaCreacion":null,"responsableCreacion":null,"fechaModificacion":null,"responsableModificacion":null},{"id":"9809e985-2d1f-4f79-a5b9-da6731e14012","encuesta":null,"orden":2,"descripcion":"Fiebre o sentirse afiebrados (escalofríos, sudoración)","respuestas":[],"obligatoria":true,"estado":false,"fechaCreacion":null,"responsableCreacion":null,"fechaModificacion":null,"responsableModificacion":null}]}

полный код

import 'package:flutter/material.dart'; 
import 'dart:convert';

Payload payloadFromJson(String str) => Payload.fromJson(json.decode(str));

String payloadToJson(Payload data) => json.encode(data.toJson());

class Payload {
  List<Pregunta> preguntas;

  Payload({
    this.preguntas,
  });

  factory Payload.fromJson(Map<String, dynamic> json) => Payload(
    preguntas: List<Pregunta>.from(json["preguntas"].map((x) => Pregunta.fromJson(x))),
  );

  Map<String, dynamic> toJson() => {
    "preguntas": List<dynamic>.from(preguntas.map((x) => x.toJson())),
  };
}

class Pregunta {
  String id;
  dynamic encuesta;
  int orden;
  String descripcion;
  List<dynamic> respuestas;
  bool obligatoria;
  bool estado;
  dynamic fechaCreacion;
  dynamic responsableCreacion;
  dynamic fechaModificacion;
  dynamic responsableModificacion;

  Pregunta({
    this.id,
    this.encuesta,
    this.orden,
    this.descripcion,
    this.respuestas,
    this.obligatoria,
    this.estado,
    this.fechaCreacion,
    this.responsableCreacion,
    this.fechaModificacion,
    this.responsableModificacion,
  });

  factory Pregunta.fromJson(Map<String, dynamic> json) => Pregunta(
    id: json["id"],
    encuesta: json["encuesta"],
    orden: json["orden"],
    descripcion: json["descripcion"],
    respuestas: List<dynamic>.from(json["respuestas"].map((x) => x)),
    obligatoria: json["obligatoria"],
    estado: json["estado"],
    fechaCreacion: json["fechaCreacion"],
    responsableCreacion: json["responsableCreacion"],
    fechaModificacion: json["fechaModificacion"],
    responsableModificacion: json["responsableModificacion"],
  );

  Map<String, dynamic> toJson() => {
    "id": id,
    "encuesta": encuesta,
    "orden": orden,
    "descripcion": descripcion,
    "respuestas": List<dynamic>.from(respuestas.map((x) => x)),
    "obligatoria": obligatoria,
    "estado": estado,
    "fechaCreacion": fechaCreacion,
    "responsableCreacion": responsableCreacion,
    "fechaModificacion": fechaModificacion,
    "responsableModificacion": responsableModificacion,
  };
}


void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {  
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(       
        primarySwatch: Colors.blue,       
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    String jsonString = '''
    {
"preguntas": [
    {
        "id": "7d0e0584-3049-4814-b127-0faa02b455b4",
        "encuesta": null,
        "orden": 1,
        "descripcion": "Dificultad para respirar de moderada a grave (no puede decir frases completas)",
        "respuestas": [],
        "obligatoria": true,
        "estado": false,
        "fechaCreacion": null,
        "responsableCreacion": null,
        "fechaModificacion": null,
        "responsableModificacion": null
    },
    {
        "id": "9809e985-2d1f-4f79-a5b9-da6731e14012",
        "encuesta": null,
        "orden": 2,
        "descripcion": "Fiebre o sentirse afiebrados (escalofríos, sudoración)",
        "respuestas": [],
        "obligatoria": true,
        "estado": false,
        "fechaCreacion": null,
        "responsableCreacion": null,
        "fechaModificacion": null,
        "responsableModificacion": null
    }
]
}
    ''';

    Payload payload = payloadFromJson(jsonString);
    String str = payloadToJson(payload);
    print(str);

    setState(() {     
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {    
    return Scaffold(
      appBar: AppBar(       
        title: Text(widget.title),
      ),
      body: Center(        
        child: Column(          
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}
1 голос
/ 06 мая 2020

Может может сработает; Например, я могу создать класс модели. Вы должны добавить в свой класс функцию Json ().

class Model{
      String id = "7d0e0584-3049-4814-b127-0faa02b455b4";
      String encuesta = "null";
      int orden = 1;
      String description = "Dificultad para respirar de moderada a grave (no puede...)";
      bool obligatoria = true;

      //Model(bla bla bla....)
      Model();

      toJson(){
        return {
          "id":id,
          "encuesta":encuesta,
          "orden":orden,
          "description":description,
          "obligatoria":obligatoria
        };
      }

    }



    void main() {
      Map<String,List<dynamic>> jsonMap = new Map();
      List<dynamic> list = new List();

      for(int i = 0 ; i < 3;i++){
        Model model = new Model();
        list.add(model.toJson());
      }

      jsonMap['preguntas'] = list;
      print(jsonMap);

    }

Результат (Печать):

{
  preguntas: [
    {
      id: 7d0e0584-3049-4814-b127-0faa02b455b4,
      encuesta: null,
      orden: 1,
      description: Dificultadpararespirardemoderadaagrave(nopuede...),
      obligatoria: true
    },
    {
      id: 7d0e0584-3049-4814-b127-0faa02b455b4,
      encuesta: null,
      orden: 1,
      description: Dificultadpararespirardemoderadaagrave(nopuede...),
      obligatoria: true
    },
    {
      id: 7d0e0584-3049-4814-b127-0faa02b455b4,
      encuesta: null,
      orden: 1,
      description: Dificultadpararespirardemoderadaagrave(nopuede...),
      obligatoria: true
    }
  ]
}
...