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

How to efficiently Parse Json to Object when different variables returned in each json string

我需要一些关于 JSON 在 Java 中解析的建议。对于一些实时更新,我得到如下 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"));

在每个setCode(string x), setName(string x), setPointer(string x), setPrice(string x)...中检查: 如果(x == null) return;

然后在解析 Json 时,您不必检查 Json 的响应是否包含哪个键。

使用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);