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

我一直很高兴地使用 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我不知道如何命名,因为顶层没有一致的名称。


倚天杖
浏览 153回答 2
2回答

偶然的你

在我看来,您的输入 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);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java