我一直很高兴地使用 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);
添加回答
举报
0/150
提交
取消