2017-06-22 13 views
1

基本的に、文字列配列である "references"というキーを含むJSON応答をサーバーから取得しています。以前の参照が見つからないときは空になるか、以前の参照でいっぱいになります。JavaのJSON StringからStringの配列を埋め込む方法

ここで私はサーバーからの応答です。この時点で

私がやっている何
{"code":100, 

"name":"3PVxkvfKyUiBg3LN24ek23KceGg6350KSkLZ.html", 

    "file":{ 
     "author":"[email protected]", 

     "idx":"xihav-zupak-zonyf-bedid-cyvun-fahac-mykud", 

     "name":"html_file", 

     "references":[ 
       "relec-toluz", 

       "rosah-vyzyh", 

       "rikik-cinom" 
     ] 
    } 
} 

は非常に良いではないですが、私は最初、私は新しい文字列配列の作成参照の数を決定するために参考文献の内容を解析し、その中にそれぞれの値を入れます。しかし、私はそれを行うための適切な方法があるかどうか疑問に思っています。

if(file.has("references")){ 
       String s = file.get("references").toString(); 
       int counter =0; 
       //determine the amount of elements (check if the references does not finish with ',' 
       if(s.length() > 2 && s.charAt(s.length()-2) != ','){ 
        counter++; 
        System.out.println(s); 
        for(int i=0 ; i < s.length(); i++){ if(s.charAt(i) == ',') counter++;} 
       }else { 
        counter++; 
        for(int i = 0; i < s.length() -2; i++){ if(s.charAt(i) == ',') counter++;} 
       } 
       JsonArray referencesList = new Gson().fromJson(s, JsonArray.class); 

       if(s != null && s.length()>2 && counter !=0){ 
        System.out.println("1"); 
        references = new String[counter]; 
        for(int i = 0 ; i < references.length ; i++){ references[i] = referencesList.get(i).getAsString();} 
       }else references = new String[]{"No previous references found"}; 
      } 

コードは私の必要性のためにうまく機能していますが、より多くの「適切に」それを行うには、他の方法があります:

ここで本当にコードの素敵な作品ではありません、私が書いたコードは、ですか?

+2

あなたは 'JSONParser'を使用していない理由は?チェックアウト:https://stackoverflow.com/questions/43724937/how-to-parse-json-string-to-java-object-with-jackson – yogidilip

+0

@yogidilipよく私は私のプロジェクト全体でGoogleのGSONを使用しています。私はそれが使いやすいことを発見しました。それが理由です。 – retArdos

+2

次に、Gsonの 'JsonParser'の使用を検討してください。解析をGsonに任せ、結果の 'JsonElement'だけを処理します。 – Ishnark

答えて

0

私は自分で解析すると、この権利をやっていなかったとして、文字列のリストを返します。だから私はいくつかの部分を書き直し、カウンタ部分を削除して、私が前にチェックしなかったJSonArrayのsize()メソッドを発見しました。

私の最後のコードは、短くて読みやすくなっています。

String[] references = null; 

String repCode = " 
{ 
    "code":100, 

    "name":"3PVxkvfKyUiBg3LN24ek23KceGg6350KSkLZ.html", 

    "file":{ 
    "author":"[email protected]", 

    "idx":"xihav-zupak-zonyf-bedid", 

    "name":"random", 

    "references":[ 
      "relec-toluz", 

      "rosah-vyzyh", 

      "rikik-cinom" 
     ] 
    } 
}" 

文字列repCodeは私が問い合わせるサーバから取得する応答です。最後に、ディスプレイへ

JsonObject file = new Gson().fromJson(repCode.get("file").toString(),JsonObject.class); 

if(file.has("references") && file.get("references").isJsonArray()){ 
    JsonArray referencesList = file.get("references").getAsJsonArray(); 

    if(referencesList.size() != 0){ 
     references = new String[referencesList.size()]; 
     for(int i = 0 ; i < references.length ; i++){ 
      references[i] = referencesList.get(i).getAsString(); 
     } 
    }else references = new String[]{"No previous references found"}; 
} 

:次の出力が得られ

for(String ref: references){ 
     System.out.println("Ref: " + ref); 
    } 

Ref: relec-toluz 
Ref: rosah-vyzyh 
Ref: rikik-cinom 
0
if you wan to do this properly, you need before to create a pojo class for your json 

public class ClassName{ 

private String code; 
private String name; 
private MyFile file; 
...... 
} 

public class MyFile{ 

private String author; 
private String idx; 
...... 
} 

Now after that, you're ready to map your json on your pojo object, you can do it easly using jackson. 


for your documentation 

https://github.com/FasterXML/jackson-docs 

So you need to add jackson on your project and you can do something like this for your mapping. 

ObjectMapper mapper = new ObjectMapper(); 
String jsonInString = "{'name' : 'qdqsdqs'}"; 


//JSON from URL to Object 
ClassName result = mapper.readValue(jsonInString , ClassName.class); 
0

良いスタートは、Json Parserを使ってJsonを解析することです。 Gsonを使用しているので、解析するにはJsonParserを調べる必要があります。それを手動で行うのは良くありません。

いくつかの重要な手順は次のとおりです。

  1. はJSONをパース(私はあなたが私を与えたJSONを取り、それを文字列として使用しますが、あなたは同じように簡単にファイルからそれを解析することができます)とget今度はJsonElementであり、あなたがJsonArrayである知っているJsonElementさんreferencesメンバー、見JsonElementfileメンバー、でJsonElement
  2. ルック。
  3. JsonArrayを繰り返し、ストリングのリストに追加してください。 String[]

    public static void main(String[] args) { 
        String json = "{\"code\":100,\n" + 
          "\n" + 
          " \"name\":\"3PVxkvfKyUiBg3LN24ek23KceGg6350KSkLZ.html\",\n" +  
          "\n" + 
          " \"file\":{\n" + 
          "   \"author\":\"[email protected]\",\n" + 
          "\n" + 
          "   \"idx\":\"xihav-zupak-zonyf-bedid-cyvun-fahac-mykud\",\n" + 
          "\n" + 
          "   \"name\":\"html_file\",\n" + 
          "\n" + 
          "   \"references\":[\n" + 
          "    \"relec-toluz\",\n" + 
          "\n" + 
          "    \"rosah-vyzyh\",\n" + 
          "\n" + 
          "    \"rikik-cinom\"\n" + 
          "  ]\n" + 
          " }\n" + 
          "}"; 
        JsonElement element = new JsonParser().parse(json); 
        System.out.println(Arrays.toString(getReferences(element))); 
    
    } 
    
    private static String[] getReferences(JsonElement jsonElement) { 
        List<String> refList = new ArrayList<>(); 
        JsonArray references = jsonElement.getAsJsonObject().get("file").getAsJsonObject().get("references").getAsJsonArray(); 
        references.forEach((reference) -> refList.add(reference.getAsString())); 
        return refList.toArray(new String[0]); 
    } 
    
関連する問題