1

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?

10
  • Please show your efforts, your code, not just a class that takes 1min to write ;) Commented Jul 25, 2017 at 20:45
  • 2
    The json you posted is actually not valid json. Could that be your problem? Commented Jul 25, 2017 at 20:47
  • @azro Added the code I tried the last try Commented Jul 25, 2017 at 20:52
  • @AlexBieg why isn't it valid json? Commented Jul 25, 2017 at 20:52
  • What does your code do? Commented Jul 25, 2017 at 20:54

1 Answer 1

1

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());
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.