如何從下面的JSON如果JSON數據是字符串閱讀JSON在Java
{
"name": "test",
"values": [
{
"valu": "23",
"valu1": "24",
"valu2": "25"
}
]
}
如何從下面的JSON如果JSON數據是字符串閱讀JSON在Java
{
"name": "test",
"values": [
{
"valu": "23",
"valu1": "24",
"valu2": "25"
}
]
}
你需要像Jackson一些庫做解析您在讀取數據。另見Jackson tutorial。我認爲你最容易從tree model開始。
使用Gson和Gson#fromJson
方法
YourType o = new Gson().fromJson("your json string", YourType.class);
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。也看看他們的user-guide
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是來自url我可以讀取它而不保存到字符串 – 1209
爲什麼?不工作? –
public class olaptemplate {public static void main(String [] args){ 嘗試URL url = new URL(「http:// localhost:8080/test/rest/Action/xyz」); httpURLConnection conn =(HttpURLConnection)url.openConnection(); conn.setRequestMethod(「GET」); conn.setRequestProperty(「Accept」,「application/json」); BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()))); 字符串輸出; StringBuilder sb = new StringBuilder(); ((output = br.readLine())!= null){sb.append(輸出) } catch(){}}} – 1209
有很多JSON解析器。 我發現json-simple容易實現。 一組decoding-examples顯示如何從字符串中創建JSON對象
這是從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,這樣你就可以用地圖的標準操作訪問它們或列表
這個問題已經得到了如此頻繁的回答,所以當SO向你提出「相關」問題時,你需要採取另一種方式。 – ins0m