【问题标题】:get specified value from Json Array从 Json 数组中获取指定值
【发布时间】:2015-04-11 09:30:44
【问题描述】:

你怎么样

我需要访问数据库并从表中读取数据然后获取它的值,因此我创建了一个 php 文件以 JSON 格式打印数据库以访问数据:

<?php
try{
    $db=new PDO('mysql:host=localhost;dbname='database','table','password');
    $row=$db->prepare('select * from users' );
    $row->execute();
    $json_data=array();
    foreach($row as $rec)
    {
        $json_array['userId']=$rec['userId'];
        $json_array['user']=$rec['user'];
        $json_array['pass']=$rec['pass'];
        $json_array['name']=$rec['name'];
        $json_array['family']=$rec['family'];
        $json_array['gender']=$rec['gender'];
        $json_array['birthday']=$rec['birthday'];

        array_push($json_data,$json_array);
    }
    echo json_encode($json_data);
} catch(PDOExcetion $e)
{
    print "Error: " . $e->getMessage()."<br/>";
    die();
}
?>

这是输出:

[
    {"userId":"1","user":"saly","pass":"666","name":"SalyR","family":"manson","gender":"male","birthday":"1988\/11\/10"},
    {"userId":"1","user":"foo","pass":"2657","name":"foo","family":"rocki","gender":"male","birthday":"13989\/2\/07"},
    {"userId":"1","user":"mil","pass":"63495","name":"milo","family":"toufa","gender":"male","birthday":"13987\/04\/21"},
    {"userId":"1","user":"soos","pass":"03468","name":"soro","family":"radi","gender":"female","birthday":"13990\/08\/09"}
]

我想访问指定的值,例如“userId”、“name”和“birthday”。

我使用三种方法获取值:

1) getJSONFromDatabase 方法获取数据库 URL 并返回 JSON 字符串。

public String getJSONFromDatabase(String getDatabaseURL) {
        HttpClient client = new DefaultHttpClient();
        HttpPost method = new HttpPost(getDatabaseURL);
        String result = "";

        try {
            HttpResponse response = client.execute(method);
            int code = response.getStatusLine().getStatusCode();
            InputStream stream = response.getEntity().getContent();
            result = inputstreamToString(stream);
            Log.i("LOG", "Code :" + code);
        } catch (IOException e) {
            Log.e("Database", "Error Connect to Database!");
            e.printStackTrace();
        }
        return result;
    }

2) inputstreamToString 方法获取一个 Inputstream 并读取所有行。

private String inputstreamToString(InputStream getStream) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(getStream));
        StringBuilder builder = new StringBuilder();
        String line;

        try {
            while ((line = reader.readLine()) != null) {
                builder.append(line);
            }
            return builder.toString();
        } catch (IOException e) {
            Log.e("Reader", "Error reading stream!");
            e.printStackTrace();
        }
        return "";
    }

3) jsonToString 方法获取带有我们想要获取的 String 值的 JSON String。

public String jsonToString(String getJSONString, String value) {
        String userId = "";
        try {
            JSONObject object = new JSONObject(getJSONString);
            userId = object.getString(value);
            return userId;

        } catch (JSONException e) {
            Log.e("JSON", "Error converting!");
            e.printStackTrace();
        }
        return "";
    }

所以我这样称呼方法:

String databaseURL = "http://192.168.56.1/saly/getDatabaseTable.php";
String jsonFormat = getJSONFromDatabase(databaseURL);
String userId = jsonToString(jsonFormat, "userId");
String name= jsonToString(jsonFormat, "name");
String birthday= jsonToString(jsonFormat, "birthday");

最后我在日志中得到了这个错误:

JSON: Error converting!  

JSON: Error converting!  

JSON: Error converting!

当我删除 [ ] 并像这个 JSON 字符串一样写一行时,它可以正常工作,只有一行!

{
    "userId":"1",
    "user":"saly",
    "pass":"666",
    "name":"SalyR",
    "family":"manson",
    "gender":"male",
    "birthday":"1988\/11\/10"
}

但这对我不起作用,因为当我以 JSON 格式打印所有数据库表时,整个数据都会打印出来。

我写的太多了,很抱歉,我试着解释每一件事。 请各位大神帮我看看哪里错了?

谢谢。

【问题讨论】:

  • 您是否使用循环打印结果?
  • 使用 Gson 比编写所有这些代码要容易得多
  • 如果您从服务器获取 json 数组,那么您应该将其解析为 json 数组而不是 json 对象。

标签: java php android mysql json


【解决方案1】:

您必须将其解析为 jsonArray。下面的片段会帮助你。

JSONArray jsonarray = new JSONArray(str);//str= your json string.


for(int i=0; i<jsonarray.length(); i++){
    JSONObject obj = jsonarray.getJSONObject(i);

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

    System.out.println(name);
    System.out.println(url);
}   

Here 是这个问题的答案。

【讨论】:

  • 通过这段代码,我可以得到 JSON 字符串中的最新行值!
【解决方案2】:
User.java

这是用户类。

public class User {

private String userId = "";
private String user = "";
private String pass = "";
private String name = "";
private String family = "";
private String gender = "";
private String birthday = "";

public String getUserId() {
    return userId;
}
public void setUserId(String userId) {
    this.userId = userId;
}
public String getUser() {
    return user;
}
public void setUser(String user) {
    this.user = user;
}
public String getPass() {
    return pass;
}
public void setPass(String pass) {
    this.pass = pass;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getFamily() {
    return family;
}
public void setFamily(String family) {
    this.family = family;
}
public String getGender() {
    return gender;
}
public void setGender(String gender) {
    this.gender = gender;
}
public String getBirthday() {
    return birthday;
}
public void setBirthday(String birthday) {
    this.birthday = birthday;
}

@Override
public String toString() {
    // TODO Auto-generated method stub
    return userId+" "+user+ " "+pass+ " "+name+" "+family+" "+ gender+ " "+ " ";
}


}

您可以将其作为测试运行,此示例显示使用 Gson 库处理 JSON 是多么容易

public class SIx {

public static void main(String[] args) {

    ArrayList<User> list = new ArrayList<User>();

    System.out.println("#### Object ####");

    for (int i = 0; i < 4; i++) {
        User user = new User();
        user.setUserId("UserId_"+i);
        user.setUser("User_"+i);
        user.setPass("Pass_"+i);
        user.setName("Name_"+i);
        user.setGender("Gender_"+i);
        user.setFamily("Family_"+i);
        user.setBirthday("Birthday_"+i);
        list.add(user);
        System.out.println(user.toString());
    }

    String string = (new Gson()).toJson(list);

    System.out.println();
    System.out.println();

    System.out.println(string);

    System.out.println();
    System.out.println();

    ArrayList<User> newList = (new Gson()).fromJson(string,  new TypeToken<ArrayList<User>>() {}.getType());

    for (int i = 0; i < newList.size(); i++) {
        User user = newList.get(i);
        System.out.println("UserId_:  "+user.getUserId());
        System.out.println("User_:  "+user.getUser());
        System.out.println("Pass_:  "+user.getPass());
        System.out.println("Name_:  "+user.getName());
        System.out.println("Gender_:  "+user.getGender());
        System.out.println("Family_:  "+user.getFamily());
        System.out.println("Birthday_:  "+user.getBirthday());
        System.out.println();
    }

}
}

输出

【讨论】:

  • 非常感谢@Pankaj Nimgade 我使用 Android Studio 如何定义 SIx 类?
  • @SalarRastari,欢迎您,使用 eclips 制作此文件只是为了运行此文件,向您展示如何使用 GSON
  • @SalarRastari,在 Android Studio 中,您应该在六个类中使用代码,您不必创建该类,但您必须创建 User.java
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-24
  • 1970-01-01
  • 2022-01-20
  • 2018-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多