Serialization to json

Viewed 65

I am trying to convert a list of type Response to a json, but I am not getting it.

This is my list of objects:

enter image description here

I want a json like this:

{
"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
    }
]

}

I'm new to Flutter, please if someone help me, I really appreciate it.

2 Answers

Maybe it can works; I can create Model class for example. You should add toJson() Function to your Class.

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);

    }

Result (Print):

{
  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
    }
  ]
}

You can can copy paste run full code below
You can use full model class definition Payload below and parse with payloadToJson
This example code create Payload object with your json string and convert it back to json string

code snippet

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

output

{"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}]}

full code

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),
      ),
    );
  }
}
Related