2017-01-04 3 views
0

JAVAでJayway JsonPath 2.2を使用しています。私は同じことについていくつか質問があります。JsonPathフィルタ後に文字列を取得する

サンプルJSON:

{ "l5": [ { "type": "type1", "result": [ "res1" ] }, { "type": "type2", "result": [ "r1" ] } ] }

  1. 私はフィルタが適用された後の文字列を取得したいですか?

    例:type2(文字列)が、私は何をやっている場合は、[ "TYPE2"](配列)

    を得ることがパスを修正してください:文字列を取得するために使用

    パスがl5[?(@.type == 'type2')].type 期待される結果ですそれを文字列として取得するのは間違っていますか?

  2. フィルターが適用された後に結果の配列にインデックスを付けることができません。どうすれば同じことができますか?

    例:

    私はパスl5[?(@.type == 'type2')][0]を使用する場合は、代わりに私の最初のJSONObjectを返すことが[]

  3. を返しますがjsonPathを使用して文字列から部分文字列を抽出することが可能ですか?私は、一般的なライブラリを維持したいと私は、JAVAで任意の操作を行うことはできません:

    何か注意

l5[0].type[0,2] => resのような?

答えて

0

jsonPathの戻り値は、常にhereから引用した配列です。

したがって、試している操作1はできません。つまり、文字列値は返されません。
jayway jsonpathでは、操作2と操作3でさえ実現可能ではありません。

グッドリードjayway Jsonpathです。操作1と2の

唯一可能な方法は、以下のようになります - 私たちはALWAYS_RETURN_LISTへのコンフィギュレーションを設定した場合のみ

String jsonpath="l5[?(@.type == 'type2')].type"; 
     DocumentContext jsonContext = JsonPath.parse(jsonString); 
     List<String> typeDataList= jsonContext.read(jsonpath); 
     System.out.println(typeDataList.get(0)); //type2 
+0

を、それは配列を返します。それ以外の場合は、戻りデータに従って値をキャストします。例:パス 'l5 [0] .type'を与えると、適切な文字列** type1 **が得られます。しかし、フィルタの場合にのみ、私は取得していません。また、私は同じを達成するために余分なJavaコードを追加することはできません。 –

関連する問題