繁体   English   中英

解析JSON时出现问题

[英]Issue when parsing JSON

当我尝试解析JSON时,我收到一个非常奇怪的错误。 实际上,文件非常简单,由一个简单的对象组成如下:

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

为了解析这个文件,我使用了以下代码,其灵感来自Android SDK的示例:

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

当我开始执行时,我在执行时出现错误。

String name = reader.nextName();

错误说它需要一个名字,但它得到一个STRING。 可以肯定的是,我用nextString()替换nextName(),我得到了相反的错误:期望一个字符串,但是是NAME。 我决定通过peek()方法检查第一个值,它清楚地说第一个元素是NAME。 所以我尝试了一个非常简单的事情,手动读取对象,没有循环,它的工作原理。 这怎么可能 ? 此外,我需要修改什么才能使此代码可用?

谢谢 !

尝试使用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");
    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");
**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");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM