簡體   English   中英

在java中從字符串中讀取json

[英]Read json from string in java

如果JSON數據在字符串中,如何從下面的JSON中讀取數據

{
    "name": "test",
    "values": [
        {
            "valu": "23",
            "valu1": "24",
            "valu2": "25"
        }
    ]
}

使用GsonGson#fromJson方法之一

fromJson(String,Class)

YourType o = new Gson().fromJson("your json string", YourType.class);

fromJson(讀者,班級)

YourType o = new Gson().fromJson(new StringReader("your json string"), 
    YourType.class);

簡單的例子:

定義要將json數據映射到的類:

static class Hobby {
    Hobby(String n) { name = n; }
    String name;
    @Override
    public String toString() {
        return "Hobby [name=" + name + "]";
    }
}

static class Person {
    String firstName, lastName;
    int age;
    List<Hobby> hobbies = new ArrayList<Hobby>();
    @Override
    public String toString() {
        return "Person [firstName=" + firstName + ", lastName=" + lastName
                + ", age=" + age + ", hobbies=" + hobbies + "]";
    } 
}

現在使用以下Json字符串進行測試

@Test
public void fromJson() {
    Person o = new Gson().fromJson(
            "{\r\n" + 
            "    \"firstName\":\"John\",\r\n" + 
            "    \"lastName\":\"Doe\",\r\n" + 
            "    \"age\":24,\r\n" + 
            "    \"hobbies\":[\r\n" + 
            "        {\r\n" + 
            "            \"name\":\"Programming\"\r\n" + 
            "        },\r\n" + 
            "        {\r\n" + 
            "            \"name\":\"Sports\"\r\n" + 
            "        }\r\n" + 
            "   ]\r\n" + 
            "}",
            Person.class);
    System.out.println(o.toString());
}

這打印:

Person [firstName=John, lastName=Doe, age=24, hobbies=[Hobby [name=Programming], Hobby [name=Sports]]]

有關其他替代方案,請參閱Gson類的javadoc。 另外看看他們的用戶指南

你需要一些像傑克遜這樣的庫來為你解析。 另見傑克遜教程 我認為從樹模型開始是最容易的。

  try {

             String data = null;
             String url = "localhost:8080/test/rest/Action/xyz";
             String[] dataArray = null;
             DefaultHttpClient client = new DefaultHttpClient();
             HttpUriRequest getRequest = new HttpGet(getUrl);
             getRequest.addHeader("User-Agent", USER_AGENT);
             getRequest.addHeader(BasicScheme.authenticate(new UsernamePasswordCredentials("key",
                "pwd"), "UTF-8", false));
             getRequest.setHeader("Content-Type", "application/json");
             HttpResponse response = client.execute(getRequest);

             HttpResponse response = client.execute(request);

             BufferedReader rd = new BufferedReader(new  InputStreamReader(response.getEntity().getContent()));
             System.out.println("Response Code : " +  response.getStatusLine().getStatusCode());
             data = rd.readLine();

            }

        } catch () {
       }

try {

        HttpGet request = new HttpGet(url);
        HttpResponse response = client.execute(request);
        System.out.println("Response Code : " + response.getStatusLine().getStatusCode());

        data = EntityUtils.toString(response.getEntity());
        dataArray = data.split(",");
    } 
    catch (Exception ex) {
    }
    JSONObject mJSONObject = new JSONObject(data);

    try {
        JSONArray mjSONArray = mJSONObject.getJSONArray("values");
        for (int i = 0; i < mjSONArray.length(); i++) {
            JSONObject obj;
            obj = mjSONArray.getJSONObject(i);
            valu = obj.getString("valu");
            valu1= obj.getString("valu1");
            valu2= obj.getString("valu2");
            system.out.println(valu);               
            system.out.println(valu1);               
            system.out.println(valu2);
        }

使用它,您可以獲取變量中的所有jsonarray數據。

有許多JSON解析器。 我發現json-simple很容易實現。 一組解碼示例顯示如何使用String創建JSON-Object

這是一個從String讀取JSON對象的代碼片段。 (直接從上面的解碼示例頁面鏈接獲取此代碼段。)

  System.out.println("=======decode=======");

  String s="[0,{\"1\":{\"2\":{\"3\":{\"4\":[5,{\"6\":7}]}}}}]";
  Object obj=JSONValue.parse(s);
  JSONArray array=(JSONArray)obj;
  System.out.println("======the 2nd element of array======");
  System.out.println(array.get(1));
  System.out.println();

  JSONObject obj2=(JSONObject)array.get(1);
  System.out.println("======field \"1\"==========");
  System.out.println(obj2.get("1"));    


  s="{}";
  obj=JSONValue.parse(s);
  System.out.println(obj);

  s="[5,]";
  obj=JSONValue.parse(s);
  System.out.println(obj);

  s="[5,,2]";
  obj=JSONValue.parse(s);
  System.out.println(obj);

JSONObject是java.util.Map,JSONArray是java.util.List,因此您可以使用Map或List的標准操作來訪問它們

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM