[英]storing json array in list
我有一個包含2個數組的json,我需要在1st中存儲第二個數組的數據。這是我的json
{
"Classes": [
{
"Cls": "1",
"Section": [
"a",
"b"
]
},
{
"Cls": "2",
"Section": [
"a",
"b"
]
},
{
"Cls": "3",
"Section": [
"a",
"b"
]
},
{
"Cls": "4",
"Section": [
"a",
"b"
]
},
{
"Cls": "5",
"Section": [
"a",
"b"
]
},
{
"Cls": "6",
"Section": [
"a",
"b"
]
},
{
"Cls": "7",
"Section": [
"a",
"b"
]
},
{
"Cls": "8",
"Section": [
"a",
"b"
]
},
{
"Cls": "9",
"Section": [
"a",
"b"
]
},
{
"Cls": "10",
"Section": [
"a",
"b"
]
}
]
}
我的代碼是
int len=json.getJSONArray("Classes").length();
String[] cls=new String[len];
System.out.println(len);
for(int i=0;i<len;i++)
{
cls[i]=(String) json.getJSONArray("Classes").getJSONObject(i).get("Cls").toString();
System.out.println("Classes="+cls[i]);
int seclength=json.getJSONArray("Classes").getJSONObject(i).getJSONArray("Section").length();
System.out.println("Section Length="+seclength);
for(int j=0;j<seclength;j++)
{
Map store=new HashMap();
String[] section=new String[seclength];
section[j]=json.getJSONArray("Classes").getJSONObject(i).getJSONArray("Section").get(j).toString();
store.put("Pclass",cls[i]);
store.put("Section",section[j]);
list.add(store);
}
}
System.out.println("List="+list);
目前我的輸出是
[{Pclass=1, Section=a}, {Pclass=1, Section=b}, {Pclass=2, Section=a}, {Pclass=2, Section=b}, {Pclass=3, Section=a}, {Pclass=3, Section=b}, {Pclass=4, Section=a}, {Pclass=4, Section=b}, {Pclass=5, Section=a}, {Pclass=5, Section=b}, {Pclass=6, Section=a}, {Pclass=6, Section=b}, {Pclass=7, Section=a}, {Pclass=7, Section=b}, {Pclass=8, Section=a}, {Pclass=8, Section=b}, {Pclass=9, Section=a}, {Pclass=9, Section=b}, {Pclass=10, Section=a}, {Pclass=10, Section=b}]
我需要Pclass 1中的a部分和b部分以及Pclass2中的a部分b等等。
您需要按以下方式定義POJO:
public class SomeClass {
private String Cls;
private List<String> Section = new ArrayList<String>();
// getters, setters & toString methods
}
以下是將json字符串解析為相應的java對象的解析邏輯
String jsonString = "YOUR_JSON_STRING";
JSONArray jsonArray = new JSONObject(jsonString).getJSONArray("Classes");
List<SomeClass> list = new ArrayList<SomeClass>();
for (int index = 0; index < jsonArray.length(); index++) {
JSONObject jsonObject = jsonArray.getJSONObject(index);
JSONArray sectionArray = jsonObject.getJSONArray("Section");
SomeClass object = new SomeClass();
object.setCls(jsonObject.getString("Cls"));
for (int i = 0; i < sectionArray.length(); i++) {
object.getSection().add(sectionArray.get(i).toString());
}
list.add(object);
}
System.out.println(list);
如果您想跳過所有解析邏輯,則可以使用GSON將json字符串解析為Java對象。
為此,您需要編寫另一個類
public class Main {
private List<SomeClass> Classes;
// getters, setters & toString methods
}
那么您的解析代碼將是
Gson gson = new GsonBuilder().create();
Main mainObject = gson.fromJson(jsonString, Main.class);
System.out.println(mainObject.getClasses());
要使用GSON,請使用以下Maven依賴項
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.2</version>
</dependency>
輸出:
[[Cls=1, Section=[a, b]], [Cls=2, Section=[a, b]], [Cls=3, Section=[a, b]], [Cls=4, Section=[a, b]], [Cls=5, Section=[a, b]], [Cls=6, Section=[a, b]], [Cls=7, Section=[a, b]], [Cls=8, Section=[a, b]], [Cls=9, Section=[a, b]], [Cls=10, Section=[a, b]]]
Innner for loop:您:
for(int j=0;j<seclength;j++)
{
Map store=new HashMap();
String[] section=new String[seclength];
section[j]=json.getJSONArray("Classes").getJSONObject(i).getJSONArray("Section").get(j).toString();
store.put("Pclass",cls[i]);
store.put("Section",section[j]);
list.add(store);
}
編輯:
List innerList = new ArrayList();
for(int j=0;j<seclength;j++)
{
String[] section=new String[seclength];
section[j]=json.getJSONArray("Classes").getJSONObject(i).getJSONArray("Section").get(j).toString();
innerList.add("Section",section[j]);
}
Map store=new HashMap();
store.put("Pclass",innerList);
list.add(store);
我希望它對其他人有幫助首先我計算了數組長度
JSONArray json=new JSONArray(jsondata);
int len=json.getJSONArray("Classes").length();
然后創建String數組
String[] classes=new String[len];
for(nt i=0;i<len;i++)
{
Map map=new Hashmap();
classes[i]=json.JSONObject(i).get("Cls").toString();
map.put("cls",Cls[i]);
現在計算內部數組的長度
int innerlen=json.getJSONArray("Classes").getJSONObject(i).getJSONArray("Section").length();
String[] section=new String[innerlen];
String secti=null;
for(int j=0;j<innerlen;j++)
{
section[j]=json.getJSONArray("Classes").getJSONObject(i).getJSONArray("Section").get(j).length();
if(secti==null)
{
secti=section[j];
}
else
{
secti=secti+","+section[j];
map.put("sections",secti);
}
}
list.add(map);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.