2017-12-22 15 views
0

私は、このJSONオブジェクトました:Javaでjson-simpleを使って単一のオブジェクトを返す方法は?

public static final String JSON_TEXT = "{" + 
"\"Subjects\": [{" + 
      "\"primaryKey\": \"1\"," + 
      "\"subjectName\": \"English\"" + 
     "}," + 
     "{" + 
      "\"primaryKey\": \"2\"," + 
      "\"subjectName\": \"Spanish\"" + 
     "}" + 
    "]," + 
    "\"Exams\": [{" + 
      "\"primaryKey\": \"1\"," + 
      "\"grade\": \"10\"" + 
     "}," + 
     "{" + 
      "\"primaryKey\": \"2\"," + 
      "\"grade\": \"20\"" + 
     "}" + 
    "]" + 
"}"; 

をし、JSON形式のDAO実装のためのいくつかの方法を構築する必要があります。私は成功し

public Collection<Subject> getSubjects() 

を構築しましたが、私はこれはこれまでのところ、私の最初のアイデアだった

public Subject findSubjectById(Integer subjectId) 

と完全に捕まってしまった

public Subject findSubjectById(Integer subjectId) { 
    JSONObject obj = (JSONObject)JSON_PARSER.parse(JSON_TEXT); 
    if (obj.get(subjectId) != null) 
     try { 
      JSONArray subjectsArray = (JSONArray) obj.get("Subjects"); 

      for (int i = 0; i < subjectsArray.length(); i++){ 

      } 
       } catch (ParseException e) { 
        e.printStackTrace(); 
       } 
     return subject; 

} 

任意のアイデア/例は非常にありますこれを解決するために感謝します。 ありがとうございます!

+0

あなたが捕まってしまったあなたは何を意味するのですか?あなたはこれまでのことを私たちに見せてもらえますか?あなたの現在の位置からさらにあなたを導くことができるように。 – Adelin

+0

私の質問を編集しました。しかし、私の考えは、私が立ち往生したためにスーパー不完全です。 – hagep

答えて

0

あなたのループ

JSONObject subDtl=subjectsArray.getJSONObject(i); 
int subKey=subDtl.getInt("primaryKey"); 
String subName=subDtl.getString("subjectName"); 
+0

subjectArray.length()に問題があり、getJSONObject(i)、getInt( "primaryKey")、getString( "subjectName")も同様です... – hagep

+0

this JSONArray subjectsArray = obj.optJSONArray( "科目"); –

+0

同じエラーとobj.optJSONArrayが同じようになりました。 – hagep

0

のためにこれを試してみてください、私はあなたがGsonを使用していない知っているが、それはすべてあなたの問題を解決します。 また、フィールド名を「科目」と「試験」の代わりに「科目」と「試験」に変更することをお勧めします。

ここでは、少なくとも考慮する価値のある完全なソリューションがあります。

public class Data { 

    private List<Subject> subjects; 

    private List<Exam> exams; 

    public Data(String json) { 
     Data data = new Gson().fromJson(json, Data.class); 
     this.subjects = data.subjects; 
     this.exams = data.exams; 
     Reporter.log(new Gson().toJson(this), true); 
    } 

    public Subject findSubjectById(Integer id) { 
     return subjects.stream().filter(subject -> subject.primaryKey.equals(id)).findAny().orElse(null); 
    } 

    public Exam findExamById(Integer id) { 
     return exams.stream().filter(exam -> exam.primaryKey.equals(id)).findAny().orElse(null); 
    } 

    public List<Subject> getSubjects() { 
     return subjects; 
    } 

    public void setSubjects(List<Subject> subjects) { 
     this.subjects = subjects; 
    } 

    public List<Exam> getExams() { 
     return exams; 
    } 

    public void setExams(List<Exam> exams) { 
     this.exams = exams; 
    } 

    public class Subject { 
     private Integer primaryKey; 
     private String subjectName; 

     public Integer getPrimaryKey() { 
      return primaryKey; 
     } 

     public void setPrimaryKey(Integer primaryKey) { 
      this.primaryKey = primaryKey; 
     } 

     public String getSubjectName() { 
      return subjectName; 
     } 

     public void setSubjectName(String subjectName) { 
      this.subjectName = subjectName; 
     } 
    } 

    public class Exam { 
     private Integer primaryKey; 
     private String grade; 

     public Integer getPrimaryKey() { 
      return primaryKey; 
     } 

     public void setPrimaryKey(Integer primaryKey) { 
      this.primaryKey = primaryKey; 
     } 

     public String getGrade() { 
      return grade; 
     } 

     public void setGrade(String grade) { 
      this.grade = grade; 
     } 
    } 

} 

ここに私たちのソリューション検証テストは

@SpringBootTest(classes = TestNGWithSpringApplication.class) 
public class JsonDataIT extends AbstractTestNGSpringContextTests { 

    String json = "{ \n" 
      + " \"subjects\":[ \n" 
      + "  { \n" 
      + "   \"primaryKey\":\"1\",\n" 
      + "   \"subjectName\":\"English\"\n" 
      + "  },\n" 
      + "  { \n" 
      + "   \"primaryKey\":\"2\",\n" 
      + "   \"subjectName\":\"Spanish\"\n" 
      + "  }\n" 
      + " ],\n" 
      + " \"exams\":[ \n" 
      + "  { \n" 
      + "   \"primaryKey\":\"1\",\n" 
      + "   \"grade\":\"10\"\n" 
      + "  },\n" 
      + "  { \n" 
      + "   \"primaryKey\":\"2\",\n" 
      + "   \"grade\":\"20\"\n" 
      + "  }\n" 
      + " ]\n" 
      + "}"; 

    @Test 
    public void findSubjectTest() { 
     Data.Subject subject = new Data(json).findSubjectById(new Integer(2)); 
     Assert.assertEquals(subject.getSubjectName(), "Spanish"); 
    } 

    @Test 
    public void findExamTest() { 
     Data.Exam exam = new Data(json).findExamById(new Integer(2)); 
     Assert.assertEquals(exam.getGrade(), "20"); 
    } 

} 

が動作するはずということです

関連する問題