如何从Json中提取值

时间:2011-09-07 10:50:47

标签: java json

我从服务器获取响应字符串,如下所示

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

我想获得名字的价值。我怎样才能做到这一点?在此先感谢。

9 个答案:

答案 0 :(得分:11)

请参阅此代码我在我的应用程序中使用的内容

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 );

答案 1 :(得分:9)

使用JSON解析器。有很多用Java编写的JSON解析器。

http://www.json.org/

查看Java部分,找到你喜欢的部分。

答案 2 :(得分:9)

在此处粘贴我的代码,这应该会有所帮助。它显示了可以使用的包。

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);

    }

}

答案 3 :(得分:0)

如果您不介意添加依赖项,可以使用JsonPath

import com.jayway.jsonpath.JsonPath;

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

“$”指定原始json字符串的根,然后您只需指定所需字段的路径。这将始终返回一个字符串。你必须自己做任何演员。

请注意,如果您指定的路径不存在,它将在运行时抛出PathNotFoundException。

答案 4 :(得分:0)

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);

答案 5 :(得分:0)

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

[{    “ status”:“ true”          }]

其中'json'是一个字符串,状态是从中获取值的键

答案 6 :(得分:0)

我们可以使用以下代码从JSON对象中获取密钥作为字符串

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

这将为字符串提供不带双引号" "的字符串

答案 7 :(得分:0)

    //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")));

答案 8 :(得分:0)

如果你想使用标准库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 对象存储为一个数组,那么你可以使用 ArrayNode(它是 JsonNode 的一个数组实现)。您可以通过索引获取元素,如下所示。

final ObjectNode node = new ObjectMapper().readValue(json, ObjectNode.class);
System.out.println("name: " + node.get(0));