简体   繁体   English

如何从json中的值获取子字段?

[英]How can I get a subfield from value in json?

lets say I have 可以说我有

{
    "name": "Json",
    "detail": {
        "first_name": "Json",
        "last_name": "Scott",
        "age": "23"
    },
    "status": "success"
}

I want to get the name "Json" by the status if it is "success" if it is "terminal" or "running" I don't want to get the name. 我想通过状态获取名称“ Json”,如果是“终端”或“正在运行”则为“成功”,我不想获取名称。 how is this achievable ? 这是如何实现的?

Convert your JSON to a JSONObject, then you can get each value by its name: 将您的JSON转换为JSONObject,然后可以通过其名称获取每个值:

JSONObject obj = new JSONObject(yourJsonAsString);
String result = yourJsonObject.getString("name");

You can get the status object first in the same way, and check it's result and then get/don't get the name accordingly. 您可以首先以相同的方式获取状态对象,并检查其结果,然后相应地获取/不获取名称。

One of the ways to do it: 方法之一:

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

public class JsonParser1 {

    static String js1 = "{\n"
            + "    \"name\": \"Json\",\n"
            + "    \"detail\": {\n"
            + "        \"first_name\": \"Json\",\n"
            + "        \"last_name\": \"Scott\",\n"
            + "        \"age\": \"23\"\n"
            + "    },\n"
            + "    \"status\": \"success\"\n"
            + "}";

    public JsonParser1() {
        parserJSON();
    }


    public void parserJSON() {
        JSONParser parser = new JSONParser();

        try {
            Object obj1 = parser.parse(js1);
            System.out.println("User 1: " + obj1.toString());
            System.out.println();

            JSONObject jobj1 = (JSONObject) obj1;
            String name = jobj1.get("name").toString();
            String status = jobj1.get("status").toString();
            if (name.equals("Json")) {
                System.out.println("Name: " + name + "\t" + "Status: " + status);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new JsonParser1();
    }

}

OUTPUT: OUTPUT:

User 1: {"name":"Json","detail":{"last_name":"Scott","first_name":"Json","age":"23"},"status":"success"}

Name: Json  Status: success

Try This 尝试这个

  1. Create Class Files To Get Objects From JSON. 创建类文件以从JSON获取对象。 (As Given Below) (如下所示)

     class ResponseObject implements Serializable { String name; Detail detail; String status; public ResponseObject() { this("", new Detail("", "", ""), ""); } public ResponseObject(String name, Detail detail, String status) { this.name = name; this.detail = detail; this.status = status; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Detail getDetail() { return detail; } public void setDetail(Detail detail) { this.detail = detail; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } } class Detail implements Serializable { String first_name; String last_name; String age; public Detail() { this("", "", ""); } public Detail(String first_name, String last_name, String age) { this.first_name = first_name; this.last_name = last_name; this.age = age; } public String getFirst_name() { return first_name; } public void setFirst_name(String first_name) { this.first_name = first_name; } public String getLast_name() { return last_name; } public void setLast_name(String last_name) { this.last_name = last_name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } } 
  2. Parse JSON String and get objects using googles GSON As shown Below. 解析JSON字符串并使用Google GSON获取对象,如下所示。

     String strResponse = "{ \\"name\\": \\"Json\\", \\"detail\\": { \\"first_name\\": \\"Json\\", \\"last_name\\": \\"Scott\\", \\"age\\": \\"23\\" }, \\"status\\": \\"success\\" }"; try { ResponseObject responseObject = new Gson().fromJson(strResponse, ResponseObject.class); if (responseObject.getStatus().equalsIgnoreCase("success")) { System.out.println(responseObject.getName()); System.out.println(responseObject.getDetail().getFirst_name()); } else { //status terminal } } catch (JsonSyntaxException e) { e.printStackTrace(); } 

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

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