A_Elric:
私はいくつかのJSONを持っており、それはかなり複雑だ - (ビット複雑すぎるとオープンエンドgsonのようなものを使用してモデルに)、そして私は、文字列のリストにある特定のノードから文字列値を抽出する必要があります。
次のコード作品が、私のJSONの動作方法が原因 - それは私が(注:私は、JSONスキーマを所有していない)したくないという余分なものの多くをつかみました
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(json);
List<JsonNode> keys = node.findValues("key") ;
for(JsonNode key: keys){
System.out.println(key.toString());
}
JSONの内容は、次のようになります(のJIRAフィルター輸出)かなり複雑です。
{
"issues": [
{
"key":"MIN-123",
...
"fields":{
"key":"A_Elric"
}
}
]
}
アサーション:私は常に、[X] .KEYなくすべてのサブキーの課題を抽出したいです。私は、リストにこれを抽出することを好むだろうが、任意の通常のデータ構造が細かいです。私はすでにジャクソンを使用しています - しかし、そうすることの健全な道があるかどうgsonもオプションです。
支援してくれてありがとう!
シャロンベンアッシャー:
JsonPathは、JSONのXPathであり、それは持っているJavaの実装を。ここでは、サブキーせずに問題の鍵を取得するための実施例です。
import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.JsonPath;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
public class JsonPathTest {
public static String ROOT_ARRAY = "issues";
public static String KEY = "key";
// get all KEYs right under ROOT array
public static String jsonPath = String.format("$.%s[*].%s", ROOT_ARRAY, KEY);
public static void main(String[] args) {
try {
String jsonStr = new String(Files.readAllBytes(Paths.get("c:/temp/xx.json")));
Object jsonObj = Configuration.defaultConfiguration().jsonProvider().parse(jsonStr);
List<String> keys = JsonPath.parse(jsonObj).read(jsonPath);
System.out.println(keys);
} catch (Exception e) {
e.printStackTrace();
}
}
}