Problem parsing JSON

I get a very strange error when I try to parse JSON. In fact, the file is very simple and consists of a simple object:

{
    "registered":false,
    "firstname":"xxx",
    "name":"yyyy",
    "email":"yyyy.xxx@gmail.com",
    "picture":"xxxxx.jpg",
    "username":"xxxy"
}

To parse this file, I used the following code, which is inspired by the Android SDK example:

public static boolean isRegistered(int nmb) {
    boolean toReturn = true;
    JsonReader reader = null;
    try {
        reader = new JsonReader(new InputStreamReader(new URL("xxx").openConnection().getInputStream()));
        reader.beginObject();
        while(reader.hasNext()) {
            String name = reader.nextName();
            Log.i("Next value", name);
            switch (name) {
                case "registered":
                    toReturn = reader.nextBoolean();
                    break;
                case "firstname":
                    ProfileManager.getInstance().setFirstname(reader.nextString());
                    break;
                case "name":
                    ProfileManager.getInstance().setName(reader.nextString());
                    break;
                case "email":
                    break;
                case "picture":
                    break;
                case "username":
                    break;
            }
        }
        reader.endObject();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    return toReturn;
}

When I start execution, I get an error message about the execution.

String name = reader.nextName();

The error says that it expects a name but gets STRING. Of course, I replace nextName () with nextString (), and I got the opposite error: I was expecting a string, but there was NAME. I decided to check the first value thanks to the peek () method, and it clearly says that the first element is NAME. So I tried very simply, reading the object manually, without a loop, and it works. How is this possible? Also, what do I need to change to make this code workable?

Thank!

+4
3

, android sdk

                JSONObject obj = new JSONObject(jsonString);
                boolean registered = obj.getBoolean("registered");
                String firstname = obj.getString("firstname");
                String name = obj.getString("name");
                String email = obj.getString("email");
                String picture = obj.getString("picture");
                String username = obj.getString("username");
+5
    public String CallUR(String url, int method) {
    BufferedReader bufferedReader = null;
    String result = null;
    HttpURLConnection httpURLConnection = null;
     /* Take an URL Object*/
    try {
        URL url1 = new URL(url);
        httpURLConnection = (HttpURLConnection) url1.openConnection();
        httpURLConnection.setRequestMethod("GET");
        httpURLConnection.setConnectTimeout(20000);
        httpURLConnection.connect();

        InputStream inputStream = httpURLConnection.getInputStream();
        StringBuffer stringBuffer = new StringBuffer();

        if (inputStream == null) {
            return null;
        }

        bufferedReader = new BufferedReader(new              InputStreamReader(inputStream));
        String line = "";
        while ((line = bufferedReader.readLine()) != null) {
            stringBuffer.append(line + " ");
        }

        if (stringBuffer.length() == 0) {
            return null;
        }
        /*Close Input Stream*/
        if (inputStream != null)
            inputStream.close();

        result = stringBuffer.toString();
        return result;
    } catch (MalformedURLException e) {

        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (httpURLConnection != null)
            httpURLConnection.disconnect();

        if (bufferedReader != null)
            try {
                bufferedReader.close();
            } catch (final Exception e) {
            }
    }
    return result;

}



JSONObject jsonObject = new JSONObject(resultString);

String registeredValue= jsonObject .getString("registered");
String firstnameValue= jsonObject .getString("firstname");
String nameValue= jsonObject .getString("name");
String emailValue= jsonObject .getString("email");
String pictureValue= jsonObject .getString("picture");
String usernameValue= jsonObject .getString("username");
0
**If you using java then ,you can create one bean** 

package com.example;

import java.util.HashMap;
import java.util.Map;
import javax.annotation.Generated;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;


public class Example {

private Boolean registered;

private String firstname;

private String name;

private String email;

private String picture;

private String username;

/**
* 
* @return
* The registered
*/

public Boolean getRegistered() {
return registered;
}

/**
* 
* @param registered
* The registered
*/
public void setRegistered(Boolean registered) {
this.registered = registered;
}

/**
* 
* @return
* The firstname
*/
public String getFirstname() {
return firstname;
}

/**
* 
* @param firstname
* The firstname
*/
public void setFirstname(String firstname) {
this.firstname = firstname;
}

/**
* 
* @return
* The name
*/
public String getName() {
return name;
}

/**
* 
* @param name
* The name
*/
public void setName(String name) {
this.name = name;
}

/**
* 
* @return
* The email
*/
public String getEmail() {
return email;
}

/**
* 
* @param email
* The email
*/
public void setEmail(String email) {
this.email = email;
}

/**
* 
* @return
* The picture
*/
public String getPicture() {
return picture;
}

/**
* 
* @param picture
* The picture
*/
public void setPicture(String picture) {
this.picture = picture;
}

/**
* 
* @return
* The username
*/
public String getUsername() {
return username;
}

/**
* 
* @param username
* The username
*/
public void setUsername(String username) {
this.username = username;
}

}

**Then after in the function you can pass the bean,Easily you can break it.**

public void display(Example example){
String userName=example.getUsername();
...
...
}
 likewise you can do complete.

If you don't want create the bean then you can directly use the JSON Object

JSONObject obj = new JSONObject(jsonString);

boolean registered = obj.getBoolean("registered");

String firstname = obj.getString("firstname");

String name = obj.getString("name");

String email = obj.getString("email");

String picture = obj.getString("picture");

String username = obj.getString("username");
0
source

Source: https://habr.com/ru/post/1655055/


All Articles