Android POJO 类中的 JSON 解析
Posted
技术标签:
【中文标题】Android POJO 类中的 JSON 解析【英文标题】:JSON Parsing in Android POJO class 【发布时间】:2020-11-13 03:03:10 【问题描述】:对于下面的响应,但我得到了错误。
JSON 响应。
[
"accountId": "51d44c1e44aec7ccda63f960",
"id": "4e74fdf0-f428-11e9-b107-42010a9a0007",
"name": "test edit asset group1 ",
"description": "New Asset-group is updatring",
"assets": [
"4a51bcc0-263e-11ea-83e0-42010a9a0007"
],
"beacon": null,
"assetNames": null
,
"accountId": "51d44c1e44aec7ccda63f960",
"id": "518d8890-f428-11e9-b107-42010a9a0007",
"name": "test edit asset group2 ",
"description": "New Asset-group is updatring",
"assets": null,
"beacon": null,
"assetNames": null
,
"accountId": "51d44c1e44aec7ccda63f960",
"id": "8b1176b0-3b88-11ea-b11f-42010a9a0007",
"name": "test",
"description": "test",
"assets": [
"e4a7d360-5c7e-11ea-b6b9-42010a9a0007"
],
"beacon": null,
"assetNames": null
,
"accountId": "51d44c1e44aec7ccda63f960",
"id": "9af47750-f62b-11e9-b6ae-42010a9a0007",
"name": "test create asset for create asset group ",
"description": null,
"assets": null,
"beacon": null,
"assetNames": null
,
"accountId": "51d44c1e44aec7ccda63f960",
"id": "abc",
"name": null,
"description": null,
"assets": [
"d34e6d90-92c0-11ea-825d-42010a9a0007",
"d6a62410-92c0-11ea-825d-42010a9a0007",
"da153320-92c0-11ea-825d-42010a9a0007"
],
"beacon": null,
"assetNames": null
,
"accountId": "51d44c1e44aec7ccda63f960",
"id": "ba5d3030-f493-11e9-b107-42010a9a0007",
"name": "test edit asset group1 ",
"description": "New Asset-group is updatring",
"assets": null,
"beacon": null,
"assetNames": null
,
"accountId": "51d44c1e44aec7ccda63f960",
"id": "bd7a9cd0-f493-11e9-b107-42010a9a0007",
"name": "test edit asset group2 ",
"description": "New Asset-group is updatring",
"assets": null,
"beacon": null,
"assetNames": null
,
"accountId": "51d44c1e44aec7ccda63f960",
"id": "cc62c610-f62c-11e9-b6ae-42010a9a0007",
"name": "test edit asset group1 ",
"description": "New Asset-group is updatring",
"assets": null,
"beacon": null,
"assetNames": null
,
"accountId": "51d44c1e44aec7ccda63f960",
"id": "cf3ce820-f62c-11e9-b6ae-42010a9a0007",
"name": "test edit asset group2 ",
"description": "New Asset-group is updatring",
"assets": null,
"beacon": null,
"assetNames": null
,
"accountId": "51d44c1e44aec7ccda63f960",
"id": "d9783b00-f62c-11e9-b6ae-42010a9a0007",
"name": "test edit asset group1 ",
"description": "New Asset-group is updatring",
"assets": null,
"beacon": null,
"assetNames": null
,
"accountId": "51d44c1e44aec7ccda63f960",
"id": "dc8cce00-f62c-11e9-b6ae-42010a9a0007",
"name": "test edit asset group2 ",
"description": "New Asset-group is updatring",
"assets": null,
"beacon": null,
"assetNames": null
,
"accountId": "51d44c1e44aec7ccda63f960",
"id": "dd6102c0-92c0-11ea-825d-42010a9a0007",
"name": "test edit asset group1 ",
"description": "New Asset-group is updatring",
"assets": [
"d34e6d90-92c0-11ea-825d-42010a9a0007",
"d6a62410-92c0-11ea-825d-42010a9a0007"
],
"beacon": null,
"assetNames": null
,
"accountId": "51d44c1e44aec7ccda63f960",
"id": "e0b11820-92c0-11ea-825d-42010a9a0007",
"name": "test edit asset group2 ",
"description": "New Asset-group is updatring",
"assets": [
"d6a62410-92c0-11ea-825d-42010a9a0007",
"da153320-92c0-11ea-825d-42010a9a0007"
],
"beacon": null,
"assetNames": null
,
"accountId": "51d44c1e44aec7ccda63f960",
"id": "ea35c870-c27b-11e9-a265-42010a9a0007",
"name": "gr1",
"description": "",
"assets": [
"3d9cd800-2636-11ea-83e0-42010a9a0007",
"68d07130-260e-11ea-83e0-42010a9a0007"
],
"beacon": null,
"assetNames": null
,
"accountId": "51d44c1e44aec7ccda63f960",
"id": "ef799780-c27b-11e9-a265-42010a9a0007",
"name": "gr2",
"description": "",
"assets": null,
"beacon": null,
"assetNames": null
]
我的 Pojo 类创建如下。 API 接口。
Call<VoAssetGroup> getBeaconAssetGroup1(@Path("id") String id, @Header("ManagedAccountId") String ManagedAccountId);
Pojo 类创建 VoAssetGroup
package com.succorfish.installer.Vo;
import java.io.Serializable;
import java.util.List;
public class VoAssetGroup implements Serializable
String accountId="";
String id="";
String name="";
String description="";
List<VoAssetGroupassets> assets;
VoAssetGroupbeacon beacon;
VoAssetGroupassetsassetNames assetNames;
public String getAccountId()
return accountId;
public void setAccountId(String accountId)
this.accountId = accountId;
public String getId()
return id;
public void setId(String id)
this.id = id;
public String getName()
return name;
public void setName(String name)
this.name = name;
public String getDescription()
return description;
public void setDescription(String description)
this.description = description;
public List<VoAssetGroupassets> getAssets()
return assets;
public void setAssets(List<VoAssetGroupassets> assets)
this.assets = assets;
public VoAssetGroupbeacon getBeacon()
return beacon;
public void setBeacon(VoAssetGroupbeacon beacon)
this.beacon = beacon;
public VoAssetGroupassetsassetNames getAssetNames()
return assetNames;
public void setAssetNames(VoAssetGroupassetsassetNames assetNames)
this.assetNames = assetNames;
VoAssetGroupassets 类
package com.succorfish.installer.Vo;
import java.io.Serializable;
import java.util.List;
public class VoAssetGroupassets implements Serializable
String assetsArray="";
public String getAssetsArray()
return assetsArray;
public void setAssetsArray(String assetsArray)
this.assetsArray = assetsArray;
VoAssetGroupbeacon 类
package com.succorfish.installer.Vo;
import java.io.Serializable;
public class VoAssetGroupbeacon implements Serializable
String beacon="";
public String getBeacon()
return beacon;
public void setBeacon(String beacon)
this.beacon = beacon;
VoAssetGroupassetsassetNames 类
package com.succorfish.installer.Vo;
public class VoAssetGroupassetsassetNames
String assetNames="";
public String getAssetNames()
return assetNames;
public void setAssetNames(String assetNames)
this.assetNames = assetNames;
有人可以指导我在 android 的改造中创建 Pojo 类。 如果我使用通用类型作为字符串,我将获得成功的响应。 但是当我使用自定义类作为通用类型时。响应失败。
【问题讨论】:
你能发布你创建的改造实例吗 请发布您的改造代码 sn-p 也用于进行 API 调用。 我已经发布了整个代码sn-p。请让我知道还有什么需要的。我会发布它。反正解决方法我已经贴出来了。解决后在下面。 【参考方案1】:我认为错误是因为在响应中assets
是一个字符串列表,而您已将其视为具有属性assetArray
的对象。
尝试将List<VoAssetGroupassets> assets;
更改为List<String> assets;
。
如果VoAssetGroupbeacon
和VoAssetGroupassetsassetNames
要成为字符串,我认为需要对它们进行类似的更改。
【讨论】:
感谢您的解决方案。修改 List您得到的响应是VoAssetGroup
的数组列表
所以你的调用需要修改为
Call<List<VoAssetGroup>> getBeaconAssetGroup1(@Path("id") String id, @Header("ManagedAccountId") String ManagedAccountId);
【讨论】:
感谢您的解决方案。修改 List解决办法是
API接口修改。
Call<List<VoAssetGroup>> getBeaconAssetGroup1(@Path("id") String id, @Header("ManagedAccountId") String ManagedAccountId);
在 VoAssetGroup 类中我做了这个修改。
import java.io.Serializable;
import java.util.List;
public class VoAssetGroup implements Serializable
String accountId="";
String id="";
String name="";
String description="";
List<String> assets;
List<String> beacon;
List<String> assetNames;
public String getAccountId()
return accountId;
public void setAccountId(String accountId)
this.accountId = accountId;
public String getId()
return id;
public void setId(String id)
this.id = id;
public String getName()
return name;
public void setName(String name)
this.name = name;
public String getDescription()
return description;
public void setDescription(String description)
this.description = description;
public List<String> getAssets()
return assets;
public void setAssets(List<String> assets)
this.assets = assets;
public List<String> getBeacon()
return beacon;
public void setBeacon(List<String> beacon)
this.beacon = beacon;
public List<String> getAssetNames()
return assetNames;
public void setAssetNames(List<String> assetNames)
this.assetNames = assetNames;
【讨论】:
以上是关于Android POJO 类中的 JSON 解析的主要内容,如果未能解决你的问题,请参考以下文章
如何在 android 中解析来自我的中间件的 Directions API 响应?