0

json 形式の文字列があり、その json から特定の値を抽出したいと考えています。例えば:

{"foo":"this is foo", "bar":{"nested_bar": "this is nested bar"} }

fooユーザーは、どちらかbarまたは両方を印刷したい場合があります。

現在、フラット json のみを読み取ることができる単純なクラスがあります。

次のコードを変更して、ネストされた json を組み込むにはどうすればよいですか?

もう 1 つの質問は、フラット json として抽出したいタグを表現する良い方法は何ですか? 配列を渡していました。

public class JsonParser {

public static String[] tagsToExtract;



public JsonParser(String[] tags){
    tagsToExtract = tags;
}


public HashMap<String, Object> extractInformation(Text line) throws JSONException{
    HashMap<String, Object> outputHash = new HashMap<String, Object>();
    JSONObject jsn = new JSONObject(line.toString());
    for (int i =0; i < tagsToExtract.length; i++){
        outputHash.put(tagsToExtract[i],jsn.get(tagsToExtract[i].toString()));
    }
    return outputHash;

}

}
4

1 に答える 1

1

Java 用の JSON ライブラリは、まさにあなたのやりたいことを実行してくれるものがたくさんあります。より高く評価されているもののいくつかは次のとおりです。

また、さまざまなオプションの詳細については、https ://stackoverflow.com/questions/338586/a-better-java-json-library を参照してください。

ただし、独自のパーサーを作成することに本当に興味がある場合は、再帰を利用することをお勧めします。次のような JSON オブジェクトがあるとします。

{
    prop1: (some value),
    prop2: (some value),
    ...
}

最上位オブジェクトの解析を開始するときは、各値を解析するときとまったく同じことを行っていることに注意してください。値自体が単なる別の JSON オブジェクトである可能性があるためです。したがって、開始する簡単な方法は、値を処理せずに、キーとそれに関連付けられた値を文字列として取得するパーサーを作成することです。次に、単純な値 (文字列、数値など) である値に到達するまで、各値に対して同じアルゴリズムを再度呼び出します。

于 2013-05-31T18:30:22.573 に答える