5
respostas

Como tratar os dados que pego em Json pra objeto??

Ola estou fazendo um pequeno projeto onde eu faço a requisição e tento autenticar mas eu queria pegar esses dados e trata- los , passar pra objeto pra poder acessar os campos do json, já

import 'package:flutter/material.dart';
import 'package:flutter/src/widgets/framework.dart';
import 'package:flutter/src/widgets/framework.dart';
import 'dart:convert';
import 'package:http/http.dart' as http;

void main() => runApp(Agenda_Gastos());

class Agenda_Gastos extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build

    return Listagem();
  }
}

class Listagem extends StatelessWidget {
  String variavel = 'asdadwa';
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
      body: Center(
        child: Text(variavel),
      ),
      floatingActionButton: FloatingActionButton(onPressed: () async {
        Map<String, String> headers = new Map<String, String>();
        headers["Content-type"] = "application/jason";
        headers["Aceppt"] = "application/jason";

        var resp = await http.get(
            'https://diario.darsh.com.br/api/app/login_pai?login=10165&password=10165',
            headers: headers);

         variavel = (resp.body.toString());
         debugPrint(variavel);
        return variavel;
      }),
    ));
  }
}

consigo acessar o json pela requisição, agora como faço pra pegar esses campos e trata-los?

5 respostas

DARSH, bom dia

Você pode usar o import 'dart:convert' que é nativo do dart ou procurar um plugin que faça isso.

Usando esse do dart você faria:

Map<String, dynamic> variavel = jsonDecode(resp.body);
debugPrint(variavel['nome do campo desserializado']);
debugPrint(variavel['firstname']);
debugPrint(variavel['lastname']);
debugPrint(variavel['etc']);

Se consegui te ajudar, por favor, marque a resposta como solucionada! Obrigado!

Fiz como o indiciado porém me retorna null em todos o campos, quando dou um debubPrint no resp.body direto, aparece tudo de uma vez normal :(

import 'package:flutter/material.dart';
import 'package:flutter/src/widgets/framework.dart';
import 'package:flutter/src/widgets/framework.dart';
import 'dart:convert';
import 'package:http/http.dart' as http;

void main() => runApp(Agenda_Gastos());

class Agenda_Gastos extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build

    return Listagem();
  }
}

class Listagem extends StatelessWidget {
  String variavel = 'asdadwa';
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
      body: Center(
        child: Text(variavel),
      ),
      floatingActionButton: FloatingActionButton(onPressed: () async {
        Map<String, String> headers = new Map<String, String>();
        headers["Content-type"] = "application/jason";
        headers["Aceppt"] = "application/jason";

        var resp = await http.get(
            'https://diario.darsh.com.br/api/app/login_pai?login=10165&password=10165',
            headers: headers);

 Map<String , dynamic> variavel = jsonDecode(resp.body);
debugPrint(variavel['nome']);
        return variavel;
      }),
    ));
  }
}

Veja se faltou:

Map<String , dynamic> variavel = jsonDecode(resp.body.data);
debugPrint(variavel['nome']);

ou dessa forma

Map<String , dynamic> variavel = jsonDecode(resp.body);
debugPrint(variavel['data']['nome']);

Esse data surgiu de onde?

Esquece o Map... no seu caso deve ser o "nome" direto

debugPrint(json.decode(response.body)['nome'].toString());

Segue a fonte agora abaixo:

http://www.macoratti.net/19/06/flut_web1.htm

Veja o exemplo que deu certo usando o projeto default do flutter e substitua apenas essa função pra testar:

Future<String> _incrementCounter() async {
    var response = await http.get('https://jsonplaceholder.typicode.com/posts/1');
    setState(() {
      _counter++;
      debugPrint(json.decode(response.body)['userId'].toString());
    });
  }