为了账号安全,请及时绑定邮箱和手机立即绑定

当没有标记所有内容时,如何使用 Gson 解析 Json 数据

当没有标记所有内容时,如何使用 Gson 解析 Json 数据

倚天杖 2021-08-04 16:00:59
我一直很高兴地使用 GoogleGson来解析提取表单的一些 JSON 元数据{  "lowlevel": {    "average_loudness": 0.570070445538  },  "rhythm": {     "beats_count": 502,      "bpm": 128.347702026  },   "tonal": {     "chords_changes_rate": 0.0534749031067     "tuning_diatonic_strength": 0.431238204241,      "tuning_equal_tempered_deviation": 0.164615109563,      "tuning_frequency": 434.193115234,      "tuning_nontempered_energy_ratio": 0.847496032715  }}使用这个public class AcousticBrainzLowlevelWrapper{    private AcousticBrainzLowLevelRhythm rhythm;    private AcousticBrainzLowLevelTonal tonal;    public AcousticBrainzLowLevelRhythm getRhythm()    {        return rhythm;    }    public void setRhythm(AcousticBrainzLowLevelRhythm rhythm)    {        this.rhythm = rhythm;    }    public AcousticBrainzLowLevelTonal getTonal()    {        return tonal;    }    public void setTonal(AcousticBrainzLowLevelTonal tonal)    {        this.tonal = tonal;    }}和 AcousticBrainzLowlevelWrapper low = gson.fromJson(result, AcousticBrainzLowlevelWrapper.class) ;(完整的 JSON 可以在这里看到)但现在 API 已经扩展到允许多次查找,比如这个url现在返回{  "96685213-a25c-4678-9a13-abd9ec81cf35": {    "0": {      "lowlevel": {        "average_loudness": 0.570070445538      },      "rhythm": {        "beats_count": 502,         "bpm": 128.347702026      },       "tonal": {        "chords_changes_rate": 0.0534749031067        "tuning_diatonic_strength": 0.431238204241,         "tuning_equal_tempered_deviation": 0.164615109563,         "tuning_frequency": 434.193115234,         "tuning_nontempered_energy_ratio": 0.847496032715     }  }不同之处在于 json 没有定义“96685213-a25c-4678-9a13-abd9ec81cf35”和“78787888-a25c-4678-9a13-abd9ec81cf35”是什么,或者“0”是什么。所以我知道它们代表什么(MusicBrainzRecording 和 offset),但我不能创建一个类 AcousticBrainzLowlevelWrapper来表示这个,所以我如何解析这个新的 api。然后打电话 AcousticBrainzLowLevelList lowMap = gson.fromJson(result, AcousticBrainzLowLevelList.class) ;但没有任何内容添加到地图中。不出所料,因为data我不知道如何命名,因为顶层没有一致的名称。
查看完整描述

2 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞


在我看来,您的输入 JSON 可以被解析以生成类型为的 Java 类Map<String,Map<Integer,AcousticBrainzLowlevelWrapper>>:


Type type = new TypeToken<Map<String,Map<Integer,AcousticBrainzLowlevelWrapper>>>(){}.getType();

Map<String,Map<Integer,AcousticBrainzLowlevelWrapper>> result = gson.fromJson(json, type);


查看完整回答
反对 回复 2021-08-04
  • 2 回答
  • 0 关注
  • 152 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信