我正在从服务器请求数据,该服务器以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"
}
最简单的方法是访问这些数据?我正在使用GSON模块.
我需要反序列化json,这是一个日期/长值数组.以下是返回的JSON的示例:
[{"2011-04-30T00:00:00-07:00":100}, {"2011-04-29T00:00:00-07:00":200}]
使用GSON我可以将其反序列化为a List<Map<Date,String>>,但希望能够将其转换为List<MyCustomClass>类似于:
public class MyCustomClass() { 
    Date date;
    Long value;
}
我似乎无法找到一种方法来指示GSON将JSON映射的键/值映射到我的自定义类中的日期/值字段.有没有办法做到这一点,或者是地图列表唯一的路线?
这是我尝试使用GSON使用的JSON类型的示例:
{
    "person": {
        "name": "Philip"
        "father.name": "Yancy"
    }
}
我想知道是否可以将此JSON反序列化为以下结构:
public class Person
{
    private String name;
    private Father father; 
}
public class Father
{
    private String name;
}
以便:
p.name == "Philip"
p.father.name == "Yancy"
目前我正在使用@SerializedName获取包含句点的属性名称,例如:
public class Person
{
    private String name;
    @SerializedName("father.name")
    private String fathersName; 
}
但是,这并不理想.
从文档看,它似乎不是立即可能的,但可能有一些我错过了 - 我是使用GSON的新手.
不幸的是我无法更改我正在消耗的JSON,而且我不愿意切换到另一个JSON解析库.
我正在使用Retrofit库与服务器端进行通信.从服务器我得到对象列表
List<BaseAction>
我将子操作存储为:ActionUrl, ActionBell, etc.
我在回调成功方法中崩溃了
 Fatal signal 11 (SIGSEGV), code 1, fault addr 0x610091 in tid 21471
我的问题是:出了什么问题以及为什么改装崩溃本机?
我使用Gson将JSON数据转换为Java对象。但是,JSON结构有一个额外的字段,可以将其展平。这可能与格森有关吗?
详细说明(因为这很难解释),JSON看起来像这样:
{
    "foo": "bar",
    "data": {
        "first": 0,
        "second": 1,
        "third": 2
    }
}
这将产生两个类,一个用于父类,一个用于data,如下所示:
public class Entry {
    private String foo;
    private Data data;
}
public class Data {
    private int first;
    private int second;
    private int third;
}
我想将data字段“展平” 到父对象中,以便Java类如下所示:
public class Entry {
    private String foo; 
    private int first;
    private int second;
    private int third;
}
使用例如TypeAdapters的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
 }
] 
我正在尝试使用Retrofit和GSON APIs JSON在异步调用中反序列化,使用a Callback<List<Event>>作为调用的参数,但我仍然找不到办法.
我有以下 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"
  }
]
我只对“instruments”字段的内容感兴趣,我只想获取“mnemonic”和“percentChange”字段并将它们反序列化为这样的对象数组
public class Data 
{
    public List<MyObject> objects;
}
public class MyObject
{
    String mnemonic;
    Float percentChange;
}
我怎样才能使用 Gson 做到这一点?
我的服务器返回一个像这样的json对象:
{
    "sw": {
        "latitude": 12.283139573692,
        "longitude": 76.623518155689
    },
    "ne": {
        "latitude": 12.30112600581,
        "longitude": 76.651167163598
    }
}
我的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;
    }
}
它在这种情况下工作正常,因为LatLng类com.google.android.gms.maps.model使用名称作为纬度,经度.但是,我宁愿让我的服务器响应为lat,lng,因为它在发送大量latlng对象时节省了空间.这里的问题是,由于这个LatLng对象是Google库的一部分,我无法添加字段映射名称注释.我想继续使用原始谷歌的LatLng类,但同时允许服务器返回较小的响应,即lat,lng.怎么能实现这一目标?