Подтвердить что ты не робот

Как извлечь значение из Json

Я получаю ответ String с сервера, как показано ниже

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

Я хочу получить значение First name. Как я могу это сделать? Спасибо в Advance.

4b9b3361

Ответ 1

см. этот код, что я использую в своем приложении

String data="{'foo':'bar','coolness':2.0, 'altitude':39000, 'pilot':{'firstName':'Buzz','lastName':'Aldrin'}, 'mission':'apollo 11'}";

Я получил это как

JSONObject json = (JSONObject) JSONSerializer.toJSON(data);        
    double coolness = json.getDouble( "coolness" );
    int altitude = json.getInt( "altitude" );
    JSONObject pilot = json.getJSONObject("pilot");
    String firstName = pilot.getString("firstName");
    String lastName = pilot.getString("lastName");

    System.out.println( "Coolness: " + coolness );
    System.out.println( "Altitude: " + altitude );
    System.out.println( "Pilot: " + lastName );

Ответ 2

Использовать парсер JSON. На Java существует множество парсеров JSON.

http://www.json.org/

Посмотрите раздел Java и найдите тот, который вам нравится.

Ответ 3

Вставляя сюда мой код, это должно помочь. Он показывает пакет, который можно использовать.

import org.json.JSONException;
import org.json.JSONObject;

public class extractingJSON {

    public static void main(String[] args) throws JSONException {
        // TODO Auto-generated method stub

        String jsonStr = "{\"name\":\"SK\",\"arr\":{\"a\":\"1\",\"b\":\"2\"}}";
        JSONObject jsonObj = new JSONObject(jsonStr);
        String name = jsonObj.getString("name");
        System.out.println(name);

        String first = jsonObj.getJSONObject("arr").getString("a");
        System.out.println(first);

    }

}

Ответ 4

Если вы не возражаете добавить зависимость, вы можете использовать JsonPath.

import com.jayway.jsonpath.JsonPath;

String firstName = JsonPath.read(rawJsonString, "$.detail.first_name");

"$" указывает корень исходной строки json, а затем вы указываете путь к полю, которое хотите. Это всегда возвращает строку. Вам придётся делать кастинг самостоятельно.

Имейте в виду, что он будет вызывать исключение PathNotFoundException во время выполнения, если указанный вами путь не существует.

Ответ 5

String jsonErrorString=((HttpClientErrorException)exception).getResponseBodyAsString();
JSONObject jsonObj=null;
String errorDetails=null;
String status=null;
try {
        jsonObj = new JSONObject(jsonErrorString);
        int index =jsonObj.getString("detail").indexOf(":");
                errorDetails=jsonObj.getString("detail").substring(index);
                status=jsonObj.getString("status");

            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            item.put("status", status);
            item.put("errordetailMsg", errorDetails);

Ответ 6

    JSONArray ja = new JSONArray(json);
    JSONObject ob = ja.getJSONObject(0);
    String nh = ob.getString("status");

[{  "статус": "правда"        }]

где 'JSON' является строкой, а статус является ключом, из которого я получу значение

Ответ 7

мы можем использовать ниже, чтобы получить ключ в виде строки из JSON OBJECT

JsonObject json = new JsonObject(); 
 json.get("key").getAsString();

это дает строку без двойных кавычек " " в строке

Ответ 8

    //import java.util.ArrayList;
    //import org.bson.Document;

    Document root = Document.parse("{\n"
            + "  \"name\": \"Json\",\n"
            + "  \"detail\": {\n"
            + "    \"first_name\": \"Json\",\n"
            + "    \"last_name\": \"Scott\",\n"
            + "    \"age\": \"23\"\n"
            + "  },\n"
            + "  \"status\": \"success\"\n"
            + "}");

    System.out.println(((String) root.get("name")));
    System.out.println(((String) ((Document) root.get("detail")).get("first_name")));
    System.out.println(((String) ((Document) root.get("detail")).get("last_name")));
    System.out.println(((String) ((Document) root.get("detail")).get("age")));
    System.out.println(((String) root.get("status")));