当前位置: 首页 > 知识库问答 >
问题:

改型:将嵌套的JSON元素解析为列表

浦墨竹
2023-03-14
{
    "type": "FeatureCollection",
    "features": [
        {
            "type": "Feature",
            "properties": {
                "mag": 6.6,
                "place": "192km ESE of Tadine, New Caledonia"
            }
        },
        {
            "type": "Feature",
            "properties": {
                "mag": 7.5,
                "place": "168km ESE of Tadine, New Caledonia"
            }
        },
        {
            "type": "Feature",
            "properties": {
                "mag": 6,
                "place": "155km ESE of Tadine, New Caledonia"
            }
        }
    ]
}
public class Earthquake {
    @SerializedName("mag")
    private double magnitude;
    @SerializedName("place")
    private String location;

    public   Earthquake(double magnitude, String location) {
        this.magnitude = magnitude;
        this.location = location;
    }
    // getters
}
public class EarthquakeDeserializer implements JsonDeserializer<ArrayList<Earthquake>> {

    @Override
    public ArrayList<Earthquake> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        // get list of "features"
        JsonElement features = json.getAsJsonObject().get("features");

        JsonArray earthquakeElements = new JsonArray();
        for (JsonElement feature : features.getAsJsonArray()){
            JsonElement properties = feature.getAsJsonObject().get("properties");
            earthquakeElements.add(properties);
        }

        Type listType = new TypeToken<ArrayList<Earthquake>>(){}.getType();

        return new Gson().fromJson(earthquakeElements, listType);
    }
}

你知道这是怎么回事吗?

共有1个答案

柏修洁
2023-03-14

您可以为Json创建这种POJO类,无论您只想要响应体的单个部分,您都需要为整个响应创建POJO,并且需要从该POJO中获得适当的属性。->

这是您的主要json对象->

public class Example {

    @SerializedName("type")
    @Expose
    private String type;
    @SerializedName("features")
    @Expose
    private List<Feature> features = null;

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public List<Feature> getFeatures() {
        return features;
    }

    public void setFeatures(List<Feature> features) {
        this.features = features;
    }

}

这是您的特性类->

package com.example;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Feature {

    @SerializedName("type")
    @Expose
    private String type;
    @SerializedName("properties")
    @Expose
    private Properties properties;

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public Properties getProperties() {
        return properties;
    }

    public void setProperties(Properties properties) {
        this.properties = properties;
    }

}
package com.example;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Properties {

    @SerializedName("mag")
    @Expose
    private Integer mag;
    @SerializedName("place")
    @Expose
    private String place;

    public Integer getMag() {
        return mag;
    }

    public void setMag(Integer mag) {
        this.mag = mag;
    }

    public String getPlace() {
        return place;
    }

    public void setPlace(String place) {
        this.place = place;
    }

}
 类似资料:
  • 我已经试过各种方法来解决这个问题了。但没有成功。 我有几节这样的课 在这种情况下,T可以是任何对象,并且应该可以在运行时解析。 Jackson真的无法将json反序列化为泛型类型吗?

  • 问题内容: 好的,现在我这里有一个无序列表: 基本上,我只想将此数据转换为JSON实体。我想在 Jquery中 完成此操作,而且我觉得我很难过。上面的列表只是一个例子,实际上,我的列表理想情况下将有更多的孩子,并且深度可能是n级(意思是,它将有孙子孙的孙子……或更多)我失去了无数数小时的睡眠,我不认为我会去任何地方:( 我想提取这些东西:锚点内的文本,锚点的url和锚点的标题,并将它们放到JSON

  • 我以前使用过对嵌套类的改装,但我目前尝试使用的api有这样一种结构: 请求正文: 和一个类似的响应机构。 请注意,bigNestedClass是一个字符串。 我为请求和响应创建了不同的pojo类。但是,创建嵌套的BigNestedClass会使该字段如预期的那样填充为JSON对象,而不是JSON字符串。我在解析响应时也遇到了同样的问题。 我的问题:有没有一种改造方法可以将嵌套类编码、解析为字符串?

  • 问题内容: 我有一堆嵌套数据,其格式类似于JSON: 有许多不同的参数具有不同的深度级别-这只是一个很小的子集。 还可能值得注意的是,当创建新的子数组时,总是有一个等号,后跟一个换行符,然后是一个空心括号(如上所示)。 是否有任何简单的循环或递归技术将此数据转换为系统友好的数据格式,例如数组或JSON?我想避免对属性名称进行硬编码。我正在寻找可以在Python,Java或PHP中使用的东西。伪代码

  • 我正在编写一个接收SQS队列对象的Lambda函数。SQS将json对象作为字符串值发送给SQS。 当我在Lambda中接收到请求时,AWS已经将其包装成一个新的JSON,由于JSON是一个字符串值,因此它将成为无效的JSON。 现在body.message不是有效的JSON。我尝试将它解析为一个原始值,比如如何使用Jackson在对象中包含原始JSON?但它总是抱怨,它在期待逗号分隔对象的地方找

  • 我目前正在学习如何在android中使用Jaxb解析xml文件。但是我不知道代码中有什么错误,以及在哪里和如何纠正它。我无法解析xml并获得食品列表。如果我删除List并简单地把它写成Food,那么只有xml中的最后一个元素被解析,其余的似乎都被覆盖了。请帮助我。 我试图解析http://www.w3schools.com/xml/simple.xml,,目前我有这样的代码: ---- 用于取消