Piet Jetse
Piet Jetse

Reputation: 418

String to Array using Json

I have an Array of Json elements as a String, my problem is how to convert them into and Object Array using Gson. I found some methods on this site but non of them seem to work for my String.

["2": {"id": 2, "name": "Cannonball", "sp": 5, "overall_average": 194, "buy_average": 193, "members": true, "sell_average": 193}, 
 "6": {"id": 6, "name": "Cannon base", "sp": 187500, "overall_average": 188110, "buy_average": 184547, "members": true, "sell_average": 185735}, 
 "12289": {"id": 12289, "name": "Mithril platelegs (t)", "sp": 2600, "overall_average": 0, "buy_average": 3000, "members": false, "sell_average": 3000}, 
 "8": {"id": 8, "name": "Cannon stand", "sp": 187500, "overall_average": 198445, "buy_average": 189001, "members": true, "sell_average": 190889}, 
 "10": {"id": 10, "name": "Cannon barrels", "sp": 187500, "overall_average": 194418, "buy_average": 185164, "members": true, "sell_average": 185935}, 
 "12": {"id": 12, "name": "Cannon furnace", "sp": 187500, "overall_average": 188000, "buy_average": 186524, "members": true, "sell_average": 186637}, 
 "4099": {"id": 4099, "name": "Mystic hat (dark)", "sp": 15000, "overall_average": 9758, "buy_average": 9229, "members": true, "sell_average": 9528}]

I need to convert the data to this java object.

public class OSBuddyItem {
    private final int id;
    private final String name;
    private final int sellPrice;
    private final int buyPrice;
    private final int averagePrice;
    private final int storePrice;
    private final boolean members;

    public OSBuddyItem(int id, String name, int sellPrice, int buyPrice, int averagePrice, int storePrice, boolean members){

        this.id = id;
        this.name = name;
        this.sellPrice = sellPrice;
        this.buyPrice = buyPrice;
        this.averagePrice = averagePrice;
        this.storePrice = storePrice;
        this.members = members;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public int getSellPrice() {
        return sellPrice;
    }

    public int getBuyPrice() {
        return buyPrice;
    }

    public int getAveragePrice() {
        return averagePrice;
    }

    public int getStorePrice() {
        return storePrice;
    }

    public boolean isMembers() {
        return members;
    }
}

This is what I tried:

Gson gson = new Gson();
        JsonParser parser = new JsonParser();
        JsonElement tradeElement = parser.parse(data);
        JsonArray itemElements = tradeElement.getAsJsonArray();
        OSBuddyItem[] items = gson.fromJson(itemElements,OSBuddyItem[].class);

        for(OSBuddyItem item : items){
            System.out.println(item.getName());
        }

Can someone please tell me how to convert the String using Gson?

Upvotes: 1

Views: 103

Answers (1)

Alok Mishra
Alok Mishra

Reputation: 2034

Your JSON String is not valid.You can validate your JSON String from [http://jsoneditoronline.org/][1]

Suppose if JSON String is in form :-

[{"1": {"id": 2, "name": "Cannonball", "sp": 5, "overall_average": 194, "buy_average": 193, "members": true, "sell_average": 193}}]

Suppose Model Name is Example.Then Model of Json will be :-

package com.example;

import com.google.gson.annotations.SerializedName;

public class Example {

@SerializedName("id")

private Integer id;
@SerializedName("name")

private String name;
@SerializedName("sp")

private Integer sp;
@SerializedName("overall_average")

private Integer overallAverage;
@SerializedName("buy_average")

private Integer buyAverage;
@SerializedName("members")

private Boolean members;
@SerializedName("sell_average")

private Integer sellAverage;

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public Integer getSp() {
    return sp;
}

public void setSp(Integer sp) {
    this.sp = sp;
}

public Integer getOverallAverage() {
    return overallAverage;
}

public void setOverallAverage(Integer overallAverage) {
    this.overallAverage = overallAverage;
}

public Integer getBuyAverage() {
    return buyAverage;
}

public void setBuyAverage(Integer buyAverage) {
    this.buyAverage = buyAverage;
}

public Boolean getMembers() {
    return members;
}

public void setMembers(Boolean members) {
    this.members = members;
}

public Integer getSellAverage() {
    return sellAverage;
}

public void setSellAverage(Integer sellAverage) {
    this.sellAverage = sellAverage;
}

}

And using GSON ,you can convert like below. [Note :TypeToken class is used to load JSON String into a custom Object]

 List<Example> myList = new Gson().fromJson(br, new TypeToken<List<JsonLog>>(){}.getType());

Upvotes: 1

Related Questions