java - 我如何遍历这个示例 JSON 数组来获取问题名称、问题准确性和专业化名称
问题描述
我看过这些文件,但没有一个给我我需要的直接答案。我正在尝试遍历 java 中 apimedic 返回的诊断数组。下面是它的样子。
[
{
Issue:
{
ID: 11,
Name: "Flu",
Accuracy: 90,
Icd: "J10;J11",
IcdName: "Influenza due to other identified influenza
virus;Influenza,
virus not identified",
ProfName: "Influenza",
Ranking: 1
},
Specialisation:
[
{
ID: 15,
Name: "General practice",
SpecialistID: 0
},
{
ID: 19,
Name: "Internal medicine",
SpecialistID: 0
}
]
},
{
Issue:
{
ID: 281,
Name: "Food poisoning",
Accuracy: 87.5,
Icd: "A05;A02;A03;A04",
IcdName: "Other bacterial foodborne intoxications, not elsewhere
classified;Other salmonella infections;Shigellosis;
intestinal infections",
ProfName: "Foodborne illness",
Ranking: 2
},
Specialisation:
[
{
ID: 15,
Name: "General practice",
SpecialistID: 0
},
{
ID: 19,
Name: "Internal medicine",
SpecialistID: 0
}
]
},
{
Issue:
{
ID: 376,
Name: "Scarlet fever",
Accuracy: 13.125,
Icd: "A38",
IcdName: "Scarlet fever",
ProfName: "Scarlatina",
Ranking: 3
},
Specialisation:
[
{
ID: 15,
Name: "General practice",
SpecialistID: 0
},
{
ID: 23,
Name: "Infectiology",
SpecialistID: 0
},
{
ID: 19,
Name: "Internal medicine",
SpecialistID: 0
}
]
}
]
我正在尝试获取问题名称、问题准确性和专业化名称的值。我已经能够让其他事情发挥作用,但这真的给我带来了困难。任何帮助,将不胜感激。谢谢你。
以下是我尝试过的:
try {
JSONArray jsonArray = new JSONArray(result);
//get the conditions
for(int i=0; i<jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String id = jsonObject.getString("Name");
Log.i("Issue: ", id);
//get the specializations inside every condition
JSONArray internalArray = new JSONArray(id);
for(int a=0; a<internalArray.length(); a++) {
JSONObject jsonObjectInternal = internalArray.getJSONObject(a);
String name = jsonObjectInternal.getString("Name");
//display the specializations
Log.i("Specialization", name);
diagnosis.add(new DiagnosisModel("Headache", "009" , "General"));
}
// String name = jsonObject.getString("Name");
//possibleConditions.add(id);
Log.i("Line: ", " : " + i);
}
内部 for 循环中的所有内容都可以正常工作,并为我提供了预期和期望的结果(SpecialisationName),但我无法获得外部循环的值(IssueName,IssueAccuracy)。我已经尝试了一切。对于 JSON 库,这是我导入的:import
org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
我尝试使用的 Api 是 ApiMedic。如果有帮助,请看一下。 http://www.apimedic.com/
解决方案
这都是关于结构的。您的伪 JSON 以 开头[
,因此它是一个数组。该数组的每个元素都以 开头{
,因此它们都是对象。
此数组中的每个对象都有两个属性名称Issue
和Specialisation
.
的值以Issue
开头{
,所以它是一个对象。它有一个名为 的属性Name
,属于 String 类型。因此,您可以使用(这是伪代码,但您应该能够将其转换为代码)获取该属性值
rootArray.getObjectAtIndex[i].getObjectNamed("Issue").getStringNamed("Name")
准确性是问题对象的另一个属性,类型为 number,因此您可以通过基本相同的方式获得它:
rootArray.getObjectAtIndex[i].getObjectNamed("Issue").getNumberNamed("Accuracy")
现在,Specialisation 的值以 开头[
,所以它是一个数组。它包含的每个元素都以 开头{
,因此它们是对象。这些对象中的每一个都有一个Name
String 类型的属性。所以你让他们使用
rootArray.getObjectAtIndex[i].getObjectNamed("Specialisation").getObjectAtIndex(j).getStringNamed("Name")
推荐阅读
- python-3.x - 在字典的值中乘以列表
- java - Java 中的 lambda 在执行/运行时是否创建匿名类?
- flutter - 更新持续时间并使用新的持续时间重新启动 CircularCountDownTimer
- python - python 3.6.9锁屏
- python - 如何解决 -'NoneType' 对象不可下标
- javascript - 有没有办法检查所有对象中的特定值是否为真?
- ssh - 如何为 SIP 呼叫配置 NAT。通过 ssh 端口转发对设备的 pjsua SIP 呼叫没有媒体传输
- angular - docker-compose up 构建一个图像而不启动另一个
- kubernetes - 如何正确设置 --kubelet-certificate-authority apiserver 参数?
- python - 使用自定义层加载 keras 模型的权重