如何在每个json字符串中返回不同的变量时有效地将Json解析为Object

时间:2016-02-03 07:02:27

标签: java json jsonobject

我需要一些关于Java中JSON解析的建议。对于某些实时更新,我得到如下的JSON响应(服务器仅返回具有新值的变量):

{"33":"7153", "170":"AA","151":10}
{"33":"7153","rate":0.5488,"45":"U05"}
{"33":"7153", "98":7.38,"132":583}

任何想法我如何有效地编写解析器来解析它们而不是每次都这样做?

String str = "{\"33\":\"7153\", \"170\":\"AA\",\"151\":10}";
JSONObject json = new JSONObject(str);
Product s = new Product();

if (json.has("33")) s.setCode(json.getString("33"));
if (json.has("170")) s.setName(json.getString("170"));
if (json.has("151")) s.setPointer(json.getString("151"));
if (json.has("98")) s.setPrice(json.getString("98"));
if (json.has("rate")) s.setRate(json.getString("rate"));
if (json.has("132")) s.setValue(json.getString("132"));
if (json.has("45")) s.setDescription(json.getString("45"));

2 个答案:

答案 0 :(得分:2)

使用Google Gson。

public class Product {
    @SerializedName("33") private String code;
    @SerializedName("170") private String name;
    @SerializedName("151") private String pointer;
    @SerializedName("98") private String price;
    @SerializedName("rate") private String rate;
    @SerializedName("132") private String value;
    @SerializedName("45") private String description;
    // setters, getters
}

    String str = "{\"33\":\"7153\", \"170\":\"AA\",\"151\":10}";
    Gson gson = new Gson();
    Product s = gson.fromJson(str, Product.class);

答案 1 :(得分:0)

在每个setCode(字符串x),setName(字符串x),setPointer(字符串x),setPrice(字符串x)...中给出一个检查: if(x == null)   返回;

然后在解析Json时你不必检查Json的响应是否具有哪个键。