首页 > 解决方案 > 我如何遍历这个示例 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/

标签: javajson

解决方案


这都是关于结构的。您的伪 JSON 以 开头[,因此它是一个数组。该数组的每个元素都以 开头{,因此它们都是对象。

此数组中的每个对象都有两个属性名称IssueSpecialisation.

的值以Issue开头{,所以它是一个对象。它有一个名为 的属性Name,属于 String 类型。因此,您可以使用(这是伪代码,但您应该能够将其转换为代码)获取该属性值

rootArray.getObjectAtIndex[i].getObjectNamed("Issue").getStringNamed("Name")

准确性是问题对象的另一个属性,类型为 number,因此您可以通过基本相同的方式获得它:

rootArray.getObjectAtIndex[i].getObjectNamed("Issue").getNumberNamed("Accuracy")

现在,Specialisation 的值以 开头[,所以它是一个数组。它包含的每个元素都以 开头{,因此它们是对象。这些对象中的每一个都有一个NameString 类型的属性。所以你让他们使用

rootArray.getObjectAtIndex[i].getObjectNamed("Specialisation").getObjectAtIndex(j).getStringNamed("Name")

推荐阅读