【发布时间】:2011-11-12 01:18:44
【问题描述】:
我正在从服务器获取响应字符串,如下所示
{
"name": "Json",
"detail": {
"first_name": "Json",
"last_name": "Scott",
"age": "23"
},
"status": "success"
}
我想获取 First name 的值。我怎样才能做到这一点?提前致谢。
【问题讨论】:
我正在从服务器获取响应字符串,如下所示
{
"name": "Json",
"detail": {
"first_name": "Json",
"last_name": "Scott",
"age": "23"
},
"status": "success"
}
我想获取 First name 的值。我怎样才能做到这一点?提前致谢。
【问题讨论】:
【讨论】:
"first_name"
getString() 方法来获取特定键的字符串值。如果此答案对您有所帮助。请使用答案左侧的复选标记接受它。
查看我在应用程序中使用的代码
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 );
【讨论】:
JSONSerializer 使用了哪个库?
在这里粘贴我的代码,这应该会有所帮助。它显示了可以使用的包。
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);
}
}
【讨论】:
如果你不介意添加依赖,可以使用JsonPath。
import com.jayway.jsonpath.JsonPath;
String firstName = JsonPath.read(rawJsonString, "$.detail.first_name");
"$" 指定原始 json 字符串的根,然后您只需指定所需字段的路径。这将始终返回一个字符串。您必须自己进行任何投射。
请注意,如果您指定的路径不存在,它将在运行时抛出 PathNotFoundException。
【讨论】:
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);
【讨论】:
JSONArray ja = new JSONArray(json);
JSONObject ob = ja.getJSONObject(0);
String nh = ob.getString("status");
[{ “状态”:“真实” } ]
'json' 是一个字符串,status 是我从中获取值的键
【讨论】:
我们可以使用下面的方法从 JSON OBJECT 中获取 key 作为字符串
JsonObject json = new JsonObject();
json.get("key").getAsString();
这给出了字符串中没有双引号" "的字符串
【讨论】:
//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")));
【讨论】:
如果你想使用标准库Jackson,你可以读取json字符串并将其存储为JsonNode。
final String json = "{\"name\": \"asdf\", \"age\": \"23\", }";
final JsonNode node = new ObjectMapper().readValue(json, JsonNode.class);
System.out.println(jsonNode.findValuesAsText("name"));
如果您想将 json 对象存储为地图,那么您可以使用 ObjectNode(它是 JsonNode 的 Map 实现)。可以通过key获取元素,如下图。
final ObjectNode node = new ObjectMapper().readValue(json, ObjectNode.class);
if (node.has("name")) {
System.out.println("name: " + node.get("name"));
}
如果您想将 json 对象存储为 Array,那么您可以使用 ArrayNode(它是 JsonNode 的 Array 实现)。您可以通过索引获取元素,如下所示。
final ObjectNode node = new ObjectMapper().readValue(json, ObjectNode.class);
System.out.println("name: " + node.get(0));
【讨论】: