André Oliveira
André Oliveira

Reputation: 1121

Parse JSON with Ionic 2 and typescript

I'm trying to parse some JSON data from randomuser.me api, to do that a found some tutorials online but aparrently something have change recently in Ionic 2, because none of them are working.

Here is what i have:

import {Component} from '@angular/core';
import {NavController} from 'ionic-angular';
import {Http} from '@angular/http';


@Component({
  templateUrl: 'build/pages/home/home.html'
})
export class HomePage {
  items : any;
  //http://api.randomuser.me/?results=10

  constructor(private navController: NavController, private http: Http) {

    this.http.get("http://api.randomuser.me/?results=10").subscribe(data => {
        console.log("Got data");
        this.items=JSON.parse(data._body).results; // this is the error
        console.log(this.items);
    });
  }

  itemClicked(event, item) {
    console.log(item.title);
    //console.log(event);
  }


}

In the terminal i can see the error: data._body - Property '_body' is private and only accessible within class 'Response'.

What can i do?

Upvotes: 5

Views: 22943

Answers (3)

rawturtle
rawturtle

Reputation: 79

Because Ionic 2 has changed a wee bit I thought I'd share the way I do it.

To access a map function we need to add this line under your import statements

import 'rxjs/add/operator/map';

then change your constructor to...

        this.http.get("http://api.randomuser.me/?results=10").map(res => res.json()).subscribe(data => {
        console.log("Got data");
        console.log(this.data);
    });
}

Now we can see a JSON string in the console.
Note the only extra bit we added is .map(res => res.json()

There is a guy Joshua Morony who does a lot of Ionic 2 videos that you should check out if you are struggling with getting data from an API: https://www.youtube.com/watch?v=vuc4dp0qHSc&index=33&list=PLvLBrJpVwC7ocO1r-xu218C15iE9gTWBA

Upvotes: 1

Adem Ergun
Adem Ergun

Reputation: 79

It has changed in the new versions try this

this.items= JSON.parse(data['_body']).results;

Upvotes: 4

basarat
basarat

Reputation: 276255

data._body for data.text(),

Instead of data.text() then parsing it you should use data.json()

this.items = data.json();

https://angular.io/docs/ts/latest/guide/server-communication.html#!#extract-data

Upvotes: 6

Related Questions