簡體   English   中英

在列表中存儲json數組

[英]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.

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