3
[{"user_id":"5633795","username":"_Vorago_","count300":"203483","count100":"16021","count50":"1517","playcount":"1634","ranked_score":"179618425","total_score":"1394180836","pp_rank":"34054","level":"59.6052","pp_raw":"1723.43","accuracy":"96.77945709228516","count_rank_ss":"1","count_rank_s":"19","count_rank_a":"17","country":"US","events":[]}]

I'm trying to convert the JSON above with GSON but am running into errors.

package com.grapefruitcode.osu;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;

import com.google.gson.Gson;

public class Main {

static String ApiKey = "";
public static void main(String[]Args) throws Exception{
    String json = readUrl("");
    System.out.println(json);
    Gson gson = new Gson();
    User user = gson.fromJson(json, User.class);
    System.out.println();
}

private static String readUrl(String urlString) throws Exception {
    BufferedReader reader = null;
    try {
        URL url = new URL(urlString);
        reader = new BufferedReader(new InputStreamReader(url.openStream()));
        StringBuffer buffer = new StringBuffer();
        int read;
        char[] chars = new char[1024];
        while ((read = reader.read(chars)) != -1)
            buffer.append(chars, 0, read); 

        return buffer.toString();
    } finally {
        if (reader != null)
            reader.close();
    }
}

}

The url and api key are left blank for security reasons, the variables are filled when I run the code and the json is converted to a string properly. I've tested it already. If somebody could tell me what is causing the error that would be wonderful.

package com.grapefruitcode.osu;

public class User {
 String user_id = "";
 String username = "";
 String count300 = "";
 String count100= "";
}
1
  • Your parsing an array in the Json when it expects an object e.g. remove the square brackets. Commented Feb 3, 2015 at 9:20

2 Answers 2

6

In JSON

  • [ ... ] represents array
  • { ... } represents object,

so [ {...} ] is array containing one object. Try using

Gson gson = new Gson();
User[] users = gson.fromJson(json, User[].class);
System.out.println(Arrays.toString(users));
//or since we know which object from array we want to print
System.out.println(users[0]);
Sign up to request clarification or add additional context in comments.

Comments

0

enter image description here

Using RetroFit 2 Solution

        interface APIInterface {
            @POST("GetDataController/GetData")
            Call<GeoEvent> getGeofanceRecord(@Body GeoEvent geoEvent);   
        }

        APIInterface apiInterface;    // Declare Globally

        apiInterface = APIClient.getClient().create(APIInterface.class);

    final GeoEvent geoEvent = new GeoEvent(userId);

            Call<GeoEvent> call = apiInterface.getGeofanceRecord(geoEvent);

            call.enqueue(new Callback<GeoEvent>() {
                @Override
                public void onResponse(Call<GeoEvent> call, Response<GeoEvent> response) {
                    GeoEvent geoEvent1 = response.body();
    //              Log.e("keshav","Location -> " +geoEvent1.responseMessage);

                    List<GeoEvent.GeoEvents> geoEventsList = geoEvent1.Table;   // Array Naame

                    List<GeoEvent.GeoEvents> geoEventsArrayList = new ArrayList<GeoEvent.GeoEvents>();
                    geoEventsArrayList.addAll(geoEventsList);
                    for (GeoEvent.GeoEvents geoEvents : geoEventsList) {

                        Log.e("keshav", "Location -> " + geoEvents.Location);
                        Log.e("keshav", "DateTime -> " + geoEvents.DateTime);
                    }

                    if (geoEventsArrayList != null) {
                        adapter.clear();
                        adapter.addAll(geoEventsArrayList);
                        adapter.notifyDataSetChanged();
                    }
                }

                @Override
                public void onFailure(Call<GeoEvent> call, Throwable t) {
                    call.cancel();
                }
            });

Your Pojo Class Like This

package pojos;

import com.google.gson.annotations.SerializedName;

import java.util.ArrayList;
import java.util.List;

public class GeoEvent {

    public String userId;

    public GeoEvent(String userId){
     this.userId= userId;
    }

    public List<GeoEvents> Table = new ArrayList<>();

    public class GeoEvents {

        @SerializedName("Location")
        public String Location;
        @SerializedName("DateTime")
        public String DateTime;

        public String getLocation() {
            return Location;
        }

        public void setLocation(String location) {
            Location = location;
        }

        public String getDateTime() {
            return DateTime;
        }

        public void setDateTime(String dateTime) {
            DateTime = dateTime;
        }
    }
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.