Json 如何向Gson对象公开类的名称?

Json 如何向Gson对象公开类的名称?,json,gson,Json,Gson,我有以下JSON数组: [{avgSpeed: 39.43, customerId: 124, distance: 13.8, endDate: "2014-11-30T10:40:55Z",…},…] 在哪里 0: {avgSpeed: 39.43, customerId: 124, distance: 13.8, endDate: "2014-11-30T10:40:55Z",…} 1: {carId: 4942, currentMileage: 138903, dateOfPurchas

我有以下JSON数组:

[{avgSpeed: 39.43, customerId: 124, distance: 13.8, endDate: "2014-11-30T10:40:55Z",…},…]
在哪里

0: {avgSpeed: 39.43, customerId: 124, distance: 13.8, endDate: "2014-11-30T10:40:55Z",…}
1: {carId: 4942, currentMileage: 138903, dateOfPurchase: "16-????-2007", id: 124, initialMileage: 13,…}
我希望将每个子字符串命名为0-Track,1-MyCars,即:

0: {Track: {avgSpeed: 39.43, customerId: 124, distance: 13.8, endDate: "2014-11-30T10:40:55Z",…}}
1: {MyCars: {carId: 4942, currentMileage: 138903, dateOfPurchase: "16-????-2007", id: 124, initialMileage: 13,…})
如何做到这一点

我从Hibernate命名的查询中提取Track和MyCars,如下所示:

 <sql-query name="findAllPrivateTracks">
        <return alias="t" class="core.domain.track.Track"/>
        <return alias="xmc" class="core.domain.car.MyCars"/>
        <![CDATA[
                SELECT {t.*},
                       {xmc.*}
                  FROM edrive.Tracks t
                  JOIN edrive.Accounts a
                    ON a.Id = t.CustomerId
                  JOIN xxmycars xmc
                    ON xmc.id = t.customerId
                   AND xmc.ownerId = a.parentAccountId
                 WHERE a.ParentAccountId = :customerId
                 ORDER BY t.trackDate DESC
        ]]>
    </sql-query>

在守则中:

List<?> result = (List<?>)session.getNamedQuery("findAllPrivateTracks")
                .setLong("customerId", customerId)
                .list();
List result=(List)session.getNamedQuery(“findallprivatracks”)
.setLong(“customerId”,customerId)
.list();
我的变压器:

    List<?> list = trackDao.getTracksForCustomer(httpUtilities.getCustomerId());
    GsonBuilder builder = new GsonBuilder();
    builder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
    builder.setPrettyPrinting();
    builder.registerTypeAdapter(Track.class, new TrackTranslator());
    builder.registerTypeAdapter(MyCars.class, new MyCarsTranslator());
    Gson gson = builder.create();
    JsonElement je = gson.toJsonTree(list);
    String s = gson.toJson(list);
List List=trackDao.getTracksForCustomer(httpUtilities.getCustomerId());
GsonBuilder=新的GsonBuilder();
builder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_,带下划线);
setPrettyPrinting();
registerTypeAdapter(Track.class,new TrackTranslator());
builder.registerTypeAdapter(MyCars.class,新的MyCarsTranslator());
Gson Gson=builder.create();
JsonElement je=gson.toJsonTree(列表);
字符串s=gson.toJson(列表);

谢谢。

解决方案是使用轨道和MyCars配对列表

代码示例如下:

class Pair<Track,MyCars> {
    private final Track track;
    private final MyCars myCars;

    public Pair( Track track, MyCars myCars ) {
        this.track = track;
        this.myCars = myCars;
    }

    public Track getTrack() { return track; }
    public MyCars getMyCars() { return myCars; }

    @Override
    public int hashCode() { return track.hashCode() ^ myCars.hashCode(); }

    @Override
    public boolean equals(Object o) {
      if (o == null) return false;
      if (!(o instanceof Pair)) return false;
      Pair<?, ?> pairo = (Pair<?, ?>) o;
      return this.track.equals(pairo.getTrack()) &&
             this.myCars.equals(pairo.getMyCars());
    }
};    
结果是:

0: {track:{avgSpeed:78.62, customerId:124, distance:806.53, endDate:2014-06-30T18:20:04Z,…},…}
>my_cars: {carId:4444, currentMileage:139000, dateOfPurchase:16-Nov-2007, id:124, initialMileage:13,…}
>track: {avgSpeed:78.62, customerId:124, distance:806.53, endDate:2014-06-30T18:20:04Z,…}
return gson.toJson(pairs);
0: {track:{avgSpeed:78.62, customerId:124, distance:806.53, endDate:2014-06-30T18:20:04Z,…},…}
>my_cars: {carId:4444, currentMileage:139000, dateOfPurchase:16-Nov-2007, id:124, initialMileage:13,…}
>track: {avgSpeed:78.62, customerId:124, distance:806.53, endDate:2014-06-30T18:20:04Z,…}