java 如何将LinkedTreeMap数据转换为字符串数据?

0sgqnhkj  于 2023-01-07  发布在  Java
关注(0)|答案(1)|浏览(269)

这是来自天气的openAPI(openAPI = https://www.data.go.kr/

Map<String, Object> restResult = restWeatherApi(apiMap);

我从open API收到了这样的回复。

响应结果

{
response=
       {header=
          {resultCode=00, resultMsg=NORMAL_SERVICE}, 
       body=
          {dataType=JSON, 
             items={item=[{baseDate=20230103, 
                    baseTime=1400, category=TMP, 
                    fcstDate=20230103, fcstTime=1500, 
                    fcstValue=0, nx=61.0, ny=127.0}, 
             {baseDate=20230103, baseTime=1400, category=UUU, f 
              cstDate=20230103, fcstTime=1500, fcstValue=2.1, 
              nx=61.0, ny=127.0}, {baseDate=20230103, 
              baseTime=1400, category=VVV, fcstDate=20230103, 
              fcstTime=1500, fcstValue=-1.2, nx=61.0, ny=127.0}, 
              {baseDate=20230103, baseTime=1400, category=VEC, 
              fcstDate=20230103, fcstTime=1500, fcstValue=300, 
              nx=61.0, ny=127.0}, {baseDate=20230103, 
              baseTime=1400, category=WSD, fcstDate=20230103, 
              fcstTime=1500, fcstValue=2.4, nx=61.0, ny=127.0}, 
              {baseDate=20230103, baseTime=1400, category=SKY, 
              fcstDate=20230103, fcstTime=1500, fcstValue=1, nx=61.0, ny=127.0}, {baseDate=20230103, baseTime=1400, category=PTY, fcstDate=20230103, fcstTime=1500, fcstValue=0, nx=61.0, ny=127.0}, {baseDate=20230103, baseTime=1400, category=POP, fcstDate=20230103, fcstTime=1500, fcstValue=0, nx=61.0, ny=127.0}, {baseDate=20230103, baseTime=1400, category=WAV, fcstDate=20230103, fcstTime=1500, fcstValue=0, nx=61.0, ny=127.0}, {baseDate=20230103, baseTime=1400, category=PCP, fcstDate=20230103, fcstTime=1500, fcstValue=강수없음, nx=61.0, ny=127.0}]}, pageNo=1.0, numOfRows=10.0, totalCount=700.0}}}

我想要数据。

String str = restResult.get("response");

但是错误类似于java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to java.lang.String
我想使用和操作此LinkedTreeMap中的所有数据。如何处理此数据?

smdncfj3

smdncfj31#

TL;医生

打电话给toString

restResult.get( "response" ).toString()

LinkedTreeMap不是String

(警告:我不使用GSON。)
restResult.get的调用显然返回了对com.google.gson.internal.LinkedTreeMap对象的引用。
您将该引用赋给了一个声明为保存String对象引用的变量。LinkedTreeMap对象 * 不是 * String对象。因此,您的赋值尝试是不正确的,无效的。
编译器检测到不正确的代码,并标记了错误。
根据the source codeLinkedTreeMap类扩展了java.util.AbstractMap。请将您的行更改为如下内容:

Map map = restResult.get( "response" ) ;

或者:

var map = restResult.get( "response" ) ;

然后你可以查询键-值对,或者通过调用Map#toString生成表示整个Map内容的文本,你可以跳过中间的Map步骤:

String str = restResult.get( "response" ).toString() ;

相关问题