- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我知道 JSONArray
和 JSONObject
的区别。
我对反序列化它们有疑问。
在反序列化对象类型为 Cluster
的数组时,我可以使用 fromJson
对象来完成。相反,在反序列化 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;
}
}
主题
类:
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());
}
The JsonData to be deserialised
提前致谢。
最佳答案
这是我用来反序列化您的 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"
]
}
您可以根据您的确切需求即兴创作此代码!
关于Android JsonArray 和 JsonObject 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17403256/
我正在阅读 Python 文档以真正深入了解 Python 语言,并遇到了 filter 和 map 函数。我以前使用过过滤器,但从未使用过映射,尽管我在 SO 上的各种 Python 问题中都见过这
当我尝试打印 BST 的级别顺序时,这个问题提示了我。 这是一个 Pre-Order Sequence: 4, 1, 2, 3, 5, 6, 7, 8 In_order Sequence : 1, 2
我的代码在 main(序列测试;)的第一行出现错误,指出它是对 sequence::sequence() 的 undefined reference 。我无法更改 main 中的代码。有谁知道我该如何
这可能很简单,但我在通常的 latex 指南中找不到任何相关内容。在这句话中: {\em hello\/} “\/”的目的是什么? 最佳答案 这就是所谓的斜体校正。其目的是确保斜体文本后有适当的间距。
当我从 Postgresql 表中删除所有记录,然后尝试重置序列以在插入时开始一个编号为 1 的新记录时,我得到不同的结果: SELECT setval('tblname_id_seq', (SELE
在版本10.0.3中,MariaDB引入了一种称为序列的存储引擎。 其ad hoc为操作生成整数序列,然后终止。 该序列包含正整数,以降序或升序排列,并使用起始,结束和递增值。 它不允许在多个查询中
如何在 Groovy 中获取给定数字的序列,例如: def number = 169 // need a method in groovy to find the consecutive number
基本上,如果这是 .NET,它看起来像这样: ISomething { string A { get; } int B { get; } } var somethings = new List
说以下代码部分(同一块): A <= 1 A <= 2 变量 A 总是被赋值为 2 吗?还是会出现竞争条件并分配 1 或 2? 我对非阻塞赋值的理解是,由硬件在 future 分配变量 A,因此它可能
在运行 WiX 设置时,我正在寻找操作列表及其顺序。不知何故,官方网站似乎没有提供任何信息。 基本问题是我想正确安排我的自定义操作。通常我需要使用 regsvr32.exe 注册一个 DLL,而这只能
F#初学者在这里 我想创建一个类型,它是具有至少一个元素的另一种具体类型(事件)的序列。任何其他元素都可以在以后随时添加。通常在 C# 中,我会创建一个具有私有(private) List 和公共(p
作为构建过程和不断发展的数据库的一部分,我试图创建一个脚本,该脚本将删除用户的所有表和序列。我不想重新创建用户,因为这将需要比所允许的更多的权限。 我的脚本创建了一个过程来删除表/序列,执行该过程,然
我想恢复两个向量的第一个日期和相同向量的第二个日期之间的日期序列,.... 这是一个例子: dates1 = as.Date(c('2015-10-01', '2015-03-27', '2015-0
这个问题已经有答案了: sql ORDER BY multiple values in specific order? (12 个回答) 已关闭 9 年前。 我有一个 sql 语句,我想要ORDER
我想恢复两个向量的第一个日期和相同向量的第二个日期之间的日期序列,.... 这是一个例子: dates1 = as.Date(c('2015-10-01', '2015-03-27', '2015-0
在用java编写代码时,我需要用“],[”分割字符串。下面是我的代码。 try (BufferedReader reader = new BufferedReader(new InputStreamR
这个问题已经有答案了: Project Euler Question 14 (Collatz Problem) (8 个回答) 已关闭 9 年前。 我正在尝试查找数字的 Collatz 序列。以下
我有一个例程函数process_letter_location(const char& c, string &word)。 在我的 main 中,我声明了一系列字符串变量,如下所示: string s
我需要找到最长的多米诺骨牌链,给定一组 12 个随机挑选的多米诺骨牌。我已经递归地生成了多米诺骨牌的所有可能性(使用 0 到 12 的面值有 91 种可能性)。多米诺骨牌由一 block “砖 blo
我有这个数据结构 Seq,它继承了类 vector 但有一些额外的功能。使用这个数据结构 Seq 我有这个预定义的数据结构: typedef Seq > MxInt2d; 我现在想要一个包含多个 Mx
我是一名优秀的程序员,十分优秀!