4

JSONArray我知道和之间的区别JSONObject

我对反序列化它们有疑问。

在反序列化对象类型数组时Cluster,我可以使用fromJsonobject. 相反,在反序列化类型对象时Topic,我不得不使用JSONParser.

有什么区别 ?我无法确定何时使用JSONParser

仅供参考Cluster

package com.example.android_json;

public class Cluster {
    public String title;
    public String stories;
    public String src;

    public Cluster()
    {       
    }

    public Cluster(String title,String stories,String src)
    {
        this.title = title;
        this.stories = stories;
        this.src = src; 
    }
}

Topic班级:

package com.example.news_android_mobile_application_cd;

import java.util.ArrayList;
import java.util.List;
import checkdeck.news.ui_services_java_api.rest.model.MiniCluster;

public class Topic {

    public Topic()
    {   
    }

    public Topic(String TopicID,String TopicName,ArrayList<MiniCluster> miniCluster,ArrayList<String> clusterid)
    {
        topicName = TopicName;
        topicID = TopicID;
        clusterList = miniCluster;
        clusterID = clusterid;
    }

    String topicID;
    String topicName;
    boolean isMandatory;
    List<MiniCluster> clusterList = new ArrayList<MiniCluster>();
    ArrayList<String> clusterID = new ArrayList<String>();
}

反序列化代码如下 -

对于集群类:

    Gson gson1 = new Gson();
Cluster[] clusters = gson1.fromJson(json, Cluster[].class);

对于主题类:

   Gson gson = new Gson();
    JsonParser parser = new JsonParser();
    JsonObject responseObj = parser.parse(json).getAsJsonObject();
    String topicID = responseObj.getAsJsonPrimitive("topicID").getAsString();
    String topicName = responseObj.getAsJsonPrimitive("topicName").getAsString();
    Boolean isMandatory = responseObj.getAsJsonPrimitive("isMandatory").getAsBoolean();
    JsonArray cList = responseObj.getAsJsonArray("clusterList");
    JsonArray cID = responseObj.getAsJsonArray("clusterID");

    List<MiniCluster> clusterList = new ArrayList<MiniCluster>();
    ArrayList<String> clusterID = new ArrayList<String>();

    for(int i=0;i<cID.size();i++)
    {
        clusterList.add(gson.fromJson(cList.get(i), MiniCluster.class));
        clusterID.add(cID.get(i).toString());

    }

要反序列化的 JsonData

提前致谢。

4

1 回答 1

1

这是我用来反序列化您的 json 的最少代码。

package com.foo.examples;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import com.google.gson.Gson;

public class JsonDeser {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        String jsonStr = JsonManupulation.readFile(System.getProperty("user.dir")+"/topic.json");
        Gson gson = new Gson();
        Topic topic = gson.fromJson(jsonStr, Topic.class);
        System.out.println(topic);

    }

    public static class RepresentativeStory{
        String description,headline;
    }

    public static class Cluster{
        public String clusterID;
        public RepresentativeStory representativeStory;
    }

    public static class Topic {
        String topicID;
        String topicName;
        boolean isMandatory;
        List<Cluster> clusterList = new ArrayList<Cluster>();
        ArrayList<String> clusterID = new ArrayList<String>();
        @Override
        public String toString() {
            return new Gson().toJson(this);
        }
    }


}

该文件topic.json包含您提供的 json 字符串。为简洁起见,我在RepresentativeStory类中只定义了两个属性。您必须定义所有属性;这些类也被定义为内部类。

这是输出

{
    "topicID": "512ecaf6e4b005fbcd13c681",
    "topicName": "India",
    "isMandatory": false,
    "clusterList": [
        {
            "clusterID": "51c7d3e284ae6383d62480cc",
            "representativeStory": {
                "description": "NEW+DELHI%3A+Canadian+e-commerce+platform+provider%2C+Shopify+has+forayed+into+the+Indian+market+in+partnership+with+Singapore%27s+SingTel.+SingTel+will+help+build+ecosystem+which+includes+tying+up+with...",
                "headline": "E-commerce+platform+provider+Shopify+enters+India"
            }
        },
        {
            "clusterID": "51c7d47784ae6383d624821c",
            "representativeStory": {
                "description": "MUMBAI%3A+Account+holders+in+rural+banks+and+small+cooperatives+can+now+make+online+purchases+with+the+National+Payment+Corporation+of+India+launching+an+e-commerce+solution+for+its+RuPay+card.+RuPay...",
                "headline": "RuPay+cards+can+be+used+online"
            }
        },
        {
            "clusterID": "51c7d36d84ae6383d6247fc2",
            "representativeStory": {
                "description": "WASHINGTON%3A+Those+insidious+email+scams+known+as+phishing%2C+in+which+a+hacker+uses+a+disguised+address+to+get+an+internet+user+to+install+malware%2C+rose+87+per+cent+worldwide+in+the+past+year%2C+a...",
                "headline": "Phishing+scams+rising+globally%3A+Study"
            }
        },
        {
            "clusterID": "51c7d62d84ae6383d6248366",
            "representativeStory": {
                "description": "With+India+making+it+clear+that+the+Afghan+reconciliation+process+should+not+lead+to+conferring+legitimacy+to+the+Taliban+and+undermine+the+elected+Afghan+government%2C+the+visiting+US+Secretary+of+Stat...",
                "headline": "No+pact+if+Taliban+has+Qaeda+links%3A+Kerry"
            }
        },
        {
            "clusterID": "51c7d28084ae6383d6247e33",
            "representativeStory": {
                "description": "Palestinian+president+Mahmud+Abbas+on+Sunday+formally+accepted+the+resignation+of+his+newly-installed+prime+minister+Rami+Hamdallah....",
                "headline": "President+Abbas+accepts+resignation+of+PM%3A+source"
            }
        },
        {
            "clusterID": "51c7d51a84ae6383d62482e1",
            "representativeStory": {
                "description": "With+land+being+acquired+in+Imphal%2C+Manipur+is+set+to+get+its+first+international+airport....",
                "headline": "Eye+on+SE+Asia%2C+Manipur+set+to+get+first+international+airport"
            }
        },
        {
            "clusterID": "51c7d39184ae6383d624800e",
            "representativeStory": {
                "description": "The+state+government+may+declare+mangroves+as+%E2%80%9Creserved+forests%E2%80%9D.+Currently%2C+mangroves+on+government+land+are+deemed+%E2%80%9Cprotected+forests%E2%80%9D+while+those+on+private+land+are+%E2%80%9Cforests%E2%80%9D....",
                "headline": "Mangroves+in+Maharashtra+may+get+status+of+%E2%80%98reserved+forests%E2%80%99"
            }
        },
        {
            "clusterID": "51c7d38084ae6383d6247fe8",
            "representativeStory": {
                "description": "NEW+DELHI%3A+Starting+June+21%2C+you+can+pay+your+passport+processing+fees+online+and+book+an+appointment+with+the+passport+office.+Making+passport+services+a+timely%2C+transparent%2C+more+accessible+and...",
                "headline": "Now%2C+pay+pay+passport+fees+online"
            }
        }
    ],
    "clusterID": [
        "51c7d3e284ae6383d62480cc",
        "51c7d47784ae6383d624821c",
        "51c7d36d84ae6383d6247fc2",
        "51c7d62d84ae6383d6248366",
        "51c7d28084ae6383d6247e33",
        "51c7d51a84ae6383d62482e1",
        "51c7d39184ae6383d624800e",
        "51c7d38084ae6383d6247fe8"
    ]
}

您可以根据您的确切需求即兴创作此代码!

于 2013-07-02T08:36:01.353 回答