Jayway JsonPath читать строку Java - PullRequest
0 голосов
/ 14 марта 2019

Я получаю массив объектов JSON, часть которых приведена ниже:

[{"Team":"LTD","Amount":10000.0,"Success":true},
 {"Team":"XYZ","Amount":50000.0,"Success":false}]

Я хочу принудительно прочитать все поля в виде строки, чтобы сделать дальнейшую обработку простой и равномерной.Поэтому Amount должен читаться как 10000.0, а не как 1.0E5.

Ниже приведен фрагмент кода, который я использую:

String input=IOUtils.toString(inputStream);
String[] fields="Amount|Success".split("\\|");
ReadContext inputParsed =JsonPath.parse(input);
List<JSONArray> resultList=Arrays.stream(fields)
                          .map(x -> inputParsed.read("$[*]."+x,JSONArray.class))
                          .collect(Collectors.toList());
//Further code to process resultList

Когда я печатаю значения и типAmount из resultList, они показаны как 1.0E5 и String соответственно.В промежутке между синтаксическим анализом и чтением преобразование из Double в String, кажется, происходит неожиданным образом.

Я прочитал аналогичный пост здесь , и он решает немного другую проблему.

inputStream и fields, которые должны быть извлечены, будут предоставлены во время выполнения.Следовательно, использование POJO и других методов, которые должны определить Class, не будет работать.

1 Ответ

0 голосов
/ 14 марта 2019
 1. You should download **org.json.jar**  this is used to convert json to what you need(String,int,etc), 
 2. Change your json format like below i mentioned

JSON:

{  
   "data":[  
      {  
         "Team":"LTD",
         "Amount":10000.0,
         "Success":true
      },
      {  
         "Team":"XYZ",
         "Amount":50000.0,
         "Success":false
      }
   ]
}

public static void main(String[] arg) throws JSONException {
        String arr = "{  \n"
                + "   \"data\":[  \n"
                + "      {  \n"
                + "         \"Team\":\"LTD\",\n"
                + "         \"Amount\":10000.0,\n"
                + "         \"Success\":true\n"
                + "      },\n"
                + "      {  \n"
                + "         \"Team\":\"XYZ\",\n"
                + "         \"Amount\":50000.0,\n"
                + "         \"Success\":false\n"
                + "      }\n"
                + "   ]\n"
                + "}";

        JSONObject obj = new JSONObject(arr);
        JSONArray data = obj.getJSONArray("data");
        int n = data.length();
        for (int i = 0; i < n; ++i) {
            final JSONObject dt = data.getJSONObject(i);
            System.out.println(dt.getString("Team"));
            System.out.println(dt.getString("Amount"));
            System.out.println(dt.getBoolean("Success"));
        }
    }
...