Tag: gson

使用GSON反序列化嵌套的JSON字符串

全部,我有以下JSON输出/字符串(它是来自JIRA API的响应): { “expand”: “names,schema”, “startAt”: 0, “maxResults”: 50, “total”: 1, “issues”: [ { “expand”: “operations,versionedRepresentations,editmeta,changelog,transitions,renderedFields”, “id”: “18200”, “self”: “https://localhost/rest/api/2/issue/18200”, “key”: “LS-1111”, “fields”: { “issuetype”: { “self”: “https://localhost/rest/api/2/issuetype/3”, “id”: “3”, “description”: “A task that needs to be done.”, “iconUrl”: “https://localhost/secure/viewavatar?size=xsmall&avatarId=10318&avatarType=issuetype”, “name”: “Task”, “subtask”: false, “avatarId”: 10318 }, “timespent”: 21600, “aggregatetimespent”: 25200, “resolution”: null, “customfield_11201”: null, […]

是否可以使用单斜杠将字符串序列化为json?

我有下课 class MyClass{ String str = “D:\folder1\folder2\folder3\file.txt” …. } 我将MyClass的对象序列化为json。 在json中我看到我的str看起来像D:\\folder1\\folder2\\folder3\\file.txt 是否有可能要求GSON不添加双斜线?

如何使用GSON解码字符串对列表?

我有一个以JSON格式从Web请求返回的类别列表。 一个例子可能是: “categories”:[[“Descriptive Cat 1 Name”,”cat1label”]] 如何在对象中表示? 我目前有一个名为Category的对象,我正在使用它: private List categories; Category对象看起来像: class Category { private String descrName; private String label; .. getters and setters.. } 当尝试使用GSON解码时,我得到了这个错误: 01-27 21:44:46.149:ERROR / AndroidRuntime(843):com.google.gson.JsonParseException:期望数组但找到对象:Category @ 437d1ff8 有什么建议么? 我也可以将这些作为地图返回,虽然不是K,而是在JSON结果中它们将是V,K,它是否可以这样映射? 如果我将Category对象全部丢弃,它确实有效,并将其映射为: private List<List> categories; 但有没有更好的方式来表示这些数据? 缺口

具有动态ArrayList项类型的Gson TypeToken

我有这个代码: Type typeOfObjectsList = new TypeToken<ArrayList>() {}.getType(); List objectsList = new Gson().fromJson(json, typeOfObjectsList); 它将JSON字符串转换为对象List 。 但是现在我希望这个ArrayList具有动态类型(不仅仅是myClass ),在运行时定义。 ArrayList的项类型将使用reflection定义。 我试过这个: private Type setModelAndGetCorrespondingList2(Class type) { Type typeOfObjectsListNew = new TypeToken<ArrayList>() {}.getType(); return typeOfObjectsListNew; } 但它不起作用。 这是例外: java.sql.SQLException: Fail to convert to internal representation: {….my json….}

带有GSON的Java JSON

这是问题所在,我正在使用Wunderground的天气APi,并且无法使用GSON来获取天气。 import java.net.*; import java.io.*; import com.google.gson.*; public class URLReader { public static URL link; public static void main(String[] args) { try{ open(); read(); }catch(IOException e){} } public static void open(){ try{ link = new URL(“http://api.wunderground.com/api/54f05b23fd8fd4b0/geolookup/conditions/forecast/q/US/CO/Denver.json”); }catch(MalformedURLException e){} } public static void read() throws IOException{ Gson gson = new Gson(); // Code to get variables […]

为什么使用GSON的Java没有将我的对象序列化为适当的JSON格式?

唯一的事情是我的对象包括枚举 class A { String id; Error error; } enum Error { int code; String message; // constructor that defines the intake of code and message INVALID(0,”Does not exist”), SERVER_ERROR(1,”Server error”); } 如何使用gson序列化以获取此JSON字符串? [{id:”123″,error {code:”0″,message:”Does not exist”}]

使用Google GSON将String转换为JSON数组

我正在使用Google GSON库将国家/地区的ArrayList转换为JSON: ArrayList countries = new ArrayList(); // arraylist gts populated Gson gson = new Gson(); String json = gson.toJson(countries); 产量: [“AFGHANISTAN”,”ALBANIA”,”ALGERIA”,”ANDORRA”,”ANGOLA”,”ANGUILLA”,”ANTARCTICA”,”ANTIGUA AND BARBUDA”,”ARGENTINA”,”ARMENIA”,”ARUBA”,”ASHMORE AND CARTIER ISLANDS”,”AUSTRALIA”,”AUSTRIA”,”AZERBAIJAN”] 如何修改我的代码以生成JSON数组? 例如: [ { “AFGHANISTAN”, “ALBANIA”, “ALGERIA”, “ANDORRA”, “ANGOLA”, “ANGUILLA”, “ANTARCTICA”, “ANTIGUA AND BARBUDA”, “ARGENTINA”, “ARMENIA”, “ARUBA”, “ASHMORE AND CARTIER ISLANDS”, “AUSTRALIA”, “AUSTRIA”, “AZERBAIJAN” } ] 谢谢! 以下是我的Java客户端用于解析已包含大括号的Web服务响应的代码。 […]

使用Gson将Json转换为Java对象

我目前正在开发一个使用Steam Web API的项目。 API以JSON格式返回数据,我想制作一个使用这些数据的Java程序。 以下是API中的以下JSON格式: { “response”: { “players”: [ { “steamid”: “—“, “communityvisibilitystate”: 1, “profilestate”: 1, “personaname”: “—“, “lastlogoff”: 1429915502, “profileurl”: “—“, “avatar”: “—“, “avatarmedium”: “—“, “avatarfull”: “—“, “personastate”: 0 } ] } } 我正在使用谷歌的JSON API,名为Gson,我在设置Java类时遇到问题,因此我可以使用fromJson()方法。 从JSON数据中,我知道有一个包含所有数据的players对象数组。 令我困惑的一件事是外部标签叫做response 。 我知道我必须构建一个代表players对象的类,但是我还必须创建一个代表response的类,因为它包含了players吗? 截至目前,我有一个名为Response.java的文件,其中包含以下内容: public class Response { private ArrayList playerSummaries = new ArrayList(); public String toString() […]

如何使用Java中的Streaming API解析JSON日志文件,然后输出列表日志文件

我有一个问题,我试图解析以JSON格式存储的大型日志文件,然后将数据列表并输出为另一个JSON文件。 以下是我正在解析的日志文件的格式: { “timestamp”: “2012-10-01TO1:00:00.000”, “id”: “someone@somewhere.net”, “action”: “Some_Action” “responsecode”: “1000” } 此处的操作是某些用户执行的操作,响应代码是该操作的结果。 时间戳和id实际上与我的制表无关,我只对动作/代码字段感兴趣。 在任何给定的日志文件中可能有成千上万的这些条目,我想要做的是跟踪所有类型的操作 , 响应代码及其各自的出现次数。 下面是我想要生成的输出示例。 {“actionName”: “Some_User_Action”, “responses”: [{“code”: “1000”, “count”: “36”}, {“code”: “1001”, “count”: “6”}, {“code”: “1002”, “count”: “3”}, {“code”: “1003”, “count”: “36”}, {“code”: “1004”, “count”: “2”}], “totalActionCount”: “83”} 所以基本上,对于每个Action,我想跟踪它生成的所有不同响应以及每个响应发生的次数。 最后,我想跟踪该行动的总回复总数。 目前,我已经为输出对象创建了一个Java类,我计划在其中存储输出数据。 我也对我应该存储响应数组的格式和它们各自的计数数字有点困惑。 响应代码类型的总数也因Action而异。 根据我的研究,我似乎需要使用Streaming API来使用JSON解析。 使用Streaming API的原因主要是由于使用非流API需要的内存开销量,这可能与这些日志文件的大小无法实现。 我目前正在考虑使用Jackson或GSON,但我无法找到任何具体的示例或教程来帮助我入门。 有没有人知道我可以学习的一个很好的例子,或者对我如何解决这个问题有任何暗示? 谢谢! […]

如何使用Gson序列化具有Context作为私有成员的自定义对象?

我有一个自定义对象的ArrayList,我试图使用Gson将其作为JSON字符串存储到磁盘。 这适用于我的对象,它只包含基本类型的数据,如字符串,但我有一个类有一个存储Activity的Context的私有成员。 当我尝试使用Gson序列化此类时,我得到以下exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxxx.xxxx/com.xxxx.xxxx.MainActivity}: java.lang.SecurityException: Can’t make method constructor accessible at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: java.lang.SecurityException: Can’t make method constructor accessible at java.lang.reflect.Constructor.setAccessible(Constructor.java:336) at com.google.gson.internal.ConstructorConstructor.newDefaultConstructor(ConstructorConstructor.java:101) at com.google.gson.internal.ConstructorConstructor.get(ConstructorConstructor.java:83) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:96) at com.google.gson.Gson.getAdapter(Gson.java:407) at […]