Как извлечь значение из Json
Я получаю ответ String с сервера, как показано ниже
{
"name": "Json",
"detail": {
"first_name": "Json",
"last_name": "Scott",
"age": "23"
},
"status": "success"
}
Я хочу получить значение First name. Как я могу это сделать? Спасибо в Advance.
Ответы
Ответ 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")));