相关疑难解决方法(0)

如何使用Gson将JSON转换为HashMap?

我正在从服务器请求数据,该服务器以JSON格式返回数据.在发出请求时将HashMap转换为JSON并不难,但另一方面似乎有点棘手.JSON响应如下所示:

{ 
    "header" : { 
        "alerts" : [ 
            {
                "AlertID" : "2",
                "TSExpires" : null,
                "Target" : "1",
                "Text" : "woot",
                "Type" : "1"
            },
            { 
                "AlertID" : "3",
                "TSExpires" : null,
                "Target" : "1",
                "Text" : "woot",
                "Type" : "1"
            }
        ],
        "session" : "0bc8d0835f93ac3ebbf11560b2c5be9a"
    },
    "result" : "4be26bc400d3c"
}
Run Code Online (Sandbox Code Playgroud)

最简单的方法是访问这些数据?我正在使用GSON模块.

java json dictionary hashmap gson

270
推荐指数
7
解决办法
30万
查看次数

GSON将键值反序列化为自定义对象

我需要反序列化json,这是一个日期/长值数组.以下是返回的JSON的示例:

[{"2011-04-30T00:00:00-07:00":100}, {"2011-04-29T00:00:00-07:00":200}]
Run Code Online (Sandbox Code Playgroud)

使用GSON我可以将其反序列化为a List<Map<Date,String>>,但希望能够将其转换为List<MyCustomClass>类似于:

public class MyCustomClass() { 
    Date date;
    Long value;
}
Run Code Online (Sandbox Code Playgroud)

我似乎无法找到一种方法来指示GSON将JSON映射的键/值映射到我的自定义类中的日期/值字段.有没有办法做到这一点,或者是地图列表唯一的路线?

java serialization gson deserialization

18
推荐指数
1
解决办法
2万
查看次数

是否可以使用GSON将句点反序列化为句点作为嵌套对象?

这是我尝试使用GSON使用的JSON类型的示例:

{
    "person": {
        "name": "Philip"
        "father.name": "Yancy"
    }
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以将此JSON反序列化为以下结构:

public class Person
{
    private String name;
    private Father father; 
}

public class Father
{
    private String name;
}
Run Code Online (Sandbox Code Playgroud)

以便:

p.name == "Philip"
p.father.name == "Yancy"
Run Code Online (Sandbox Code Playgroud)

目前我正在使用@SerializedName获取包含句点的属性名称,例如:

public class Person
{
    private String name;

    @SerializedName("father.name")
    private String fathersName; 
}
Run Code Online (Sandbox Code Playgroud)

但是,这并不理想.

从文档看,它似乎不是立即可能的,但可能有一些我错过了 - 我是使用GSON的新手.

不幸的是我无法更改我正在消耗的JSON,而且我不愿意切换到另一个JSON解析库.

java gson

5
推荐指数
1
解决办法
3488
查看次数

改造本机崩溃致命信号11(SIGSEGV)

我正在使用Retrofit库与服务器端进行通信.从服务器我得到对象列表

List<BaseAction>
Run Code Online (Sandbox Code Playgroud)

我将子操作存储为:ActionUrl, ActionBell, etc. 我在回调成功方法中崩溃了

 Fatal signal 11 (SIGSEGV), code 1, fault addr 0x610091 in tid 21471
Run Code Online (Sandbox Code Playgroud)

我的问题是:出了什么问题以及为什么改装崩溃本机?

serialization android json gson retrofit

5
推荐指数
1
解决办法
1632
查看次数

是否可以使用Gson展平JSON层次结构?

我使用Gson将JSON数据转换为Java对象。但是,JSON结构有一个额外的字段,可以将其展平。这可能与格森有关吗?

详细说明(因为这很难解释),JSON看起来像这样:

{
    "foo": "bar",
    "data": {
        "first": 0,
        "second": 1,
        "third": 2
    }
}
Run Code Online (Sandbox Code Playgroud)

这将产生两个类,一个用于父类,一个用于data,如下所示:

public class Entry {
    private String foo;
    private Data data;
}

public class Data {
    private int first;
    private int second;
    private int third;
}
Run Code Online (Sandbox Code Playgroud)

我想将data字段“展平” 到父对象中,以便Java类如下所示:

public class Entry {
    private String foo; 
    private int first;
    private int second;
    private int third;
}
Run Code Online (Sandbox Code Playgroud)

使用例如TypeAdapters的Gson是否可以实现?

java json gson

5
推荐指数
1
解决办法
1722
查看次数

Retrofit,Gson和一系列异构对象

我正在使用Retrofit对我们的服务器执行REST请求.其中一个请求返回一个array对象,这些对象一旦在POJOs中反序列化,就会从abstract class Event.Event有getEventType()返回a 的方法String,这个字符串是"EventType"我将JSONObject在数组中的s 内始终具有的键的值.

这就是它的JSON样子(我们现在有7种类型的对象):

[
 {
  "EventType":"typeA",
  "Data":"data"
 }, 
 {
  "EventType":"typeB",
  "OtherData":3
 }
] 
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用RetrofitGSON APIs JSON在异步调用中反序列化,使用a Callback<List<Event>>作为调用的参数,但我仍然找不到办法.

android json gson deserialization retrofit

3
推荐指数
1
解决办法
1318
查看次数

如何使用 Gson 仅从 Json 反序列化某些特定字段?

我有以下 JSON 字符串

 [
  {
    "channel": "/bvmt/initValues",
    "data": {
      "value": {
        "instrumentIds": "['TN0007250012','TN0007500010']",
        "instruments": "[{'mnemonic':'ADWYA','marche':'ADWYA','phaut':5.82,'open':5.82,'nbrTrans':7,'veille':5.82,'time':'11:14:28','recapChange':0.00,'state':'','variation':'.','ref':5.82,'stateGrp':'S','percentChange':-0.34,'last':5.80,'bestTransaction':[{'value':5.82,'qte':'3','time':'10:00:00'},{'value':5.82,'qte':'5','time':'10:02:26'},{'value':5.82,'qte':'145','time':'10:23:27'},{'value':5.81,'qte':'100','time':'10:23:42'},{'value':5.80,'qte':'1000','time':'10:23:42'},{'value':5.73,'qte':'1','time':'10:31:21'},{'value':5.80,'qte':'100','time':'11:14:28'}],'volume':7857.19,'id':'TN0007250012','bestLimits':[{'quantiteAchat':2600,'timeVente':'11:44:10','ordreAchat':1,'prixAchat':5.76,'quantiteVente':100,'timeAchat':'11:44:10','ordreVente':1,'prixVente':5.90},{'quantiteAchat':50,'timeVente':'11:44:10','ordreAchat':1,'prixAchat':5.74,'quantiteVente':210,'timeAchat':'11:44:10','ordreVente':1,'prixVente':5.95},{'quantiteAchat':250,'timeVente':'11:44:10','ordreAchat':2,'prixAchat':5.75,'quantiteVente':187,'timeAchat':'11:44:10','ordreVente':1,'prixVente':5.94},{'quantiteAchat':189,'timeVente':'11:44:10','ordreAchat':3,'prixAchat':5.73,'quantiteVente':1112,'timeAchat':'11:44:10','ordreVente':1,'prixVente':5.97},{'quantiteAchat':44,'timeVente':'11:44:10','ordreAchat':1,'prixAchat':5.72,'quantiteVente':400,'timeAchat':'11:44:10','ordreVente':1,'prixVente':5.98}],'openStatus':'','cto':0,'valuer':'ADWYA','pbas':5.73,'grp':'S','abrv':'ADWYA','houv':'','qto':0,'seuilBas':5.65,'vto':0,'quantite':1354,'seuilHaut':5.99},{'mnemonic':'WIFAK','marche':'WIFAK','phaut':7.11,'open':7.00,'nbrTrans':2,'veille':7.13,'time':'10:24:15','recapChange':0.00,'state':'','variation':'.','ref':7.13,'stateGrp':'S','percentChange':-0.28,'last':7.11,'bestTransaction':[{'value':7.00,'qte':'99','time':'10:17:00'},{'value':7.11,'qte':'100','time':'10:24:15'}],'volume':1404.00,'id':'TN0007200017','bestLimits':[{'quantiteAchat':100,'timeVente':'11:00:19','ordreAchat':1,'prixAchat':6.80,'quantiteVente':100,'timeAchat':'11:00:19','ordreVente':1,'prixVente':7.09},{'quantiteAchat':0,'timeVente':'11:00:19','ordreAchat':0,'prixAchat':0.00,'quantiteVente':82,'timeAchat':'11:00:19','ordreVente':1,'prixVente':7.11},{'quantiteAchat':0,'timeVente':'11:00:19','ordreAchat':0,'prixAchat':0.00,'quantiteVente':284,'timeAchat':'11:00:19','ordreVente':2,'prixVente':7.10},{'quantiteAchat':0,'timeVente':'11:00:19','ordreAchat':0,'prixAchat':0.00,'quantiteVente':222,'timeAchat':'11:00:19','ordreVente':1,'prixVente':7.12},{'quantiteAchat':0,'timeVente':'11:00:19','ordreAchat':0,'prixAchat':0.00,'quantiteVente':110,'timeAchat':'11:00:19','ordreVente':2,'prixVente':7.13}],'openStatus':'','cto':0,'valuer':'WIFACK INT BANK','pbas':7.00,'grp':'S','abrv':'WIFAK','houv':'','qto':0,'seuilBas':6.92,'vto':0,'quantite':199,'seuilHaut':7.34}]"
      },
      "action": "initValues",
      "infoSession": {
        "lastInstrumentOrder": 11672,
        "state": 1,
        "lastInstrumentTime": "12:03:00",
        "tradingTime": "08:04:02",
        "tradingDate": "2017-04-24"
      }
    },
    "id": "5"
  },
  {
    "channel": "/bvmt/process",
    "successful": true,
    "id": "5"
  }
]
Run Code Online (Sandbox Code Playgroud)

我只对“instruments”字段的内容感兴趣,我只想获取“mnemonic”和“percentChange”字段并将它们反序列化为这样的对象数组

public class Data 
{
    public List<MyObject> objects;
}

public class MyObject
{
    String mnemonic;
    Float percentChange;
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能使用 Gson 做到这一点?

java parsing json gson

3
推荐指数
1
解决办法
2901
查看次数

Gson映射Lat/Lng类

我的服务器返回一个像这样的json对象:

{
    "sw": {
        "latitude": 12.283139573692,
        "longitude": 76.623518155689
    },
    "ne": {
        "latitude": 12.30112600581,
        "longitude": 76.651167163598
    }
}
Run Code Online (Sandbox Code Playgroud)

我的Gson课程是

import com.google.android.gms.maps.model.LatLng;

/**
 * Created by Moz on 12/10/15.
 */
public class Box {
    LatLng ne;
    LatLng sw;

    public LatLng getNorthEast() {
        return ne;
    }

    public LatLng getSouthWest() {
        return sw;
    }

}
Run Code Online (Sandbox Code Playgroud)

它在这种情况下工作正常,因为LatLng类com.google.android.gms.maps.model使用名称作为纬度,经度.但是,我宁愿让我的服务器响应为lat,lng,因为它在发送大量latlng对象时节省了空间.这里的问题是,由于这个LatLng对象是Google库的一部分,我无法添加字段映射名称注释.我想继续使用原始谷歌的LatLng类,但同时允许服务器返回较小的响应,即lat,lng.怎么能实现这一目标?

java android google-maps-api-3 gson

0
推荐指数
1
解决办法
1268
查看次数