java - 将 JSON 数组解析为对象(嵌套 JSON)
问题描述
我有一个这样的 JSON 文件 -
{
"users": [
{
"displayName": "Amanda Polly",
"givenName": "Amanda",
"surname": "Polly",
"extension_user_type": "user",
"identities": [
{
"signInType": "emailAddress",
"issuerAssignedId": "amandapolly@gmail.com"
}
],
"extension_timezone": "PST",
"extension_locale": "en-US",
"extension_tenant": "EG1234"
},
{
"displayName": "Lowa Doe",
"givenName": "Lowa",
"surname": "Doe",
"extension_user_type": "user",
"identities": [
{
"signInType": "userName",
"issuerAssignedId": "lowadow123"
}
],
"extension_timezone": "PST",
"extension_locale": "en-US",
"extension_tenant": "EG1234"
}
]
}
如果您可以看到有 2 个用户(Amanda 和 Lowa)包裹在一个数组“users”中。我解析了文件并将所有这些转换为单个字符串。
现在我正在尝试遍历所有字段,例如 displayName、givenName、surname 等等!但如果您看到身份再次是“signInType”和“issuerAssignedId”的包装器。
我编写了一个遍历所有用户的代码,但我无法获得“identites”字段。下面是我的代码:
这里 JSONObject 的参数是 jsonAsString (这是我的具有上述 JSON 的字符串),现在我创建了一个 JSONArray 并传递了包装器“用户”。
下面的代码工作正常,但有人可以帮助遍历每个用户的“身份”字段。
JSONObject jsonObject = new JSONObject(jsonAsString);
org.json.JSONArray jsonArray = jsonObject.getJSONArray("users");
System.out.println(jsonArray.length());
for(int i = 0; i< jsonArray.length();i++)
{
displayName = jsonArray.getJSONObject(i).getString("displayName");
givenName = jsonArray.getJSONObject(i).getString("givenName");
surname = jsonArray.getJSONObject(i).getString("surname");
extension_user_type = jsonArray.getJSONObject(i).getString("extension_user_type");
try
{
extension_timezone = jsonArray.getJSONObject(i).getString("extension_timezone");
extension_locale = jsonArray.getJSONObject(i).getString("extension_locale");
extension_tenant = jsonArray.getJSONObject(i).getString("extension_tenant");
}
catch(JSONException e)
{
System.out.println("\nSome attribute was not found!");
}
System.out.println("\ndisplayName : "+displayName);
System.out.println("\ngivenName : "+givenName);
System.out.println("\nsurname : "+surname);
System.out.println("\nextension_user_type : "+extension_user_type);
System.out.println("\nextension_timezone : "+extension_timezone);
System.out.println("\nextension_locale : "+extension_locale);
System.out.println("\nextension_tenant : "+extension_tenant);
解决方案
使用以下代码:
JSONObject jsonObject = new JSONObject(jsonAsString); org.json.JSONArray jsonArray = jsonObject.getJSONArray("users");
System.out.println(jsonArray.length());
for(int i = 0; i< jsonArray.length();i++)
{
displayName = jsonArray.getJSONObject(i).getString("displayName");
givenName = jsonArray.getJSONObject(i).getString("givenName");
surname = jsonArray.getJSONObject(i).getString("surname");
extension_user_type = jsonArray.getJSONObject(i).getString("extension_user_type");
org.json.JSONArray jsonIdentitiesArray = jsonArray.getJSONObject(i).getJSONArray("identities");
for(int j = 0; j< jsonIdentitiesArray.length();j++)
{
String signInType=jsonIdentitiesArray.getJSONObject(j).getString("signInType");
System.out.println("signInType : "+signInType);
String issuerAssignedId=jsonIdentitiesArray.getJSONObject(j).getString("issuerAssignedId");
System.out.println("issuerAssignedId : "+issuerAssignedId);
}
try
{
extension_timezone = jsonArray.getJSONObject(i).getString("extension_timezone");
extension_locale = jsonArray.getJSONObject(i).getString("extension_locale");
extension_tenant = jsonArray.getJSONObject(i).getString("extension_tenant");
}
catch(JSONException e)
{
System.out.println("\nSome attribute was not found!");
}
System.out.println("\ndisplayName : "+displayName);
System.out.println("\ngivenName : "+givenName);
System.out.println("\nsurname : "+surname);
System.out.println("\nextension_user_type : "+extension_user_type);
System.out.println("\nextension_timezone : "+extension_timezone);
System.out.println("\nextension_locale : "+extension_locale);
System.out.println("\nextension_tenant : "+extension_tenant);
推荐阅读
- python - 从系列中创建列的python代码是什么
- javascript - 在函数中使用表单中的数据
- php - Laravel - 模拟数据库表达式
- python-3.x - Tkinter 进度条移动速度变化?
- shell - 如何在 OpenOCD 适配器接口驱动程序命令中插入通配符?
- java - 将图像上传到 Firebase 存储需要许可吗?如何?
- typescript - 如何将 NestJS 中的服务注入 typeorm 存储库?
- ruby-on-rails - 具有嵌套关联的 Active Record 查询,包括
- python - 在 MySQL 命令中使用 %s 时出现问题
- html - Bootstrap 3 Nav Menu 与 WHMCS 内容重叠