Попробуйте получить значение из строки Json - PullRequest
0 голосов
/ 08 марта 2020

Я написал приложение, которое конвертирует XML в Json, я пытаюсь получить значение "content" из Json, но не могу его получить. Я получаю только полный файл, но не могу получить значение «content», которое дает мне необходимое значение Price.

Вот часть кода

                //From XML to Json
                JSONObject xmlToJson = XML.toJSONObject(result);
                //Get the Json from result
                JSONObject jsonObject = xmlToJson.getJSONObject("result");
                Log.i("ergebniss",jsonObject.toString());
                //Get the value plz (Works)
                String json1 = jsonObject.getString("plz");
                //Give it out to TextView
                xmltojson.setText(json1.toString());

Это JSON строка, которую я получаю

{
   "result":{
      "plz":87484,
      "taxRate":19,
      "deliveries":{
         "delivery":{
            "unloadingPoints":1,
            "litre":1000,
            "price":{
               "oilGrade":"Heizöl Standard Schwefelarm",
               "orderLink":"https://www.heizoel24.de/.../1/1000/1/24,9,11,5,6/67,78",
               "content":"67,78"
            }
         }
      }
   }
}

Пожалуйста, кто-нибудь может мне помочь в этом?

Ответы [ 3 ]

0 голосов
/ 08 марта 2020

Вы можете сделать это с Джексоном.

<!--Converted xml from json-->
<root>
   <result>
      <deliveries>
         <delivery>
            <litre>1000</litre>
            <price>
               <content>67,78</content>
               <oilGrade>Heizöl Standard Schwefelarm</oilGrade>
               <orderLink>https://www.heizoel24.de/.../1/1000/1/24,9,11,5,6/67,78</orderLink>
            </price>
            <unloadingPoints>1</unloadingPoints>
         </delivery>
      </deliveries>
      <plz>87484</plz>
      <taxRate>19</taxRate>
   </result>
</root>

Сначала преобразуйте XML в JSON, а затем получите специфицированный c дочерний элемент, считав каждый подчиненный JsonNodes из преобразованного JSON.

        XmlMapper xmlMapper = new XmlMapper();
        JsonNode jsonNode = xmlMapper.readTree(xml.getBytes());
        JsonNode price = new ObjectMapper()
                .valueToTree(jsonNode)
                .get("result")
                .get("deliveries")
                .get("delivery")
                .get("price");

        String content = price.get("content").asText(); // 67,78

зависимости Джексона

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.8.2</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.8.2</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.8.2</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
            <version>2.8.2</version>
        </dependency>
0 голосов
/ 13 марта 2020

Я нашел решение, и оно работает!

   try {
                jsonObj = XML.toJSONObject(s);                               // XML to Json
                JSONObject result1 = jsonObj.getJSONObject("result");        // gets top level object
                JSONObject deliveries = result1.getJSONObject("deliveries"); // get deliveries "collection" (Not a collection in this case)
                JSONObject delivery = deliveries.getJSONObject("delivery"); // get price object (both properties and content)
                JSONObject priceObj = delivery.getJSONObject("price");      // get price object (both properties and content)
                String oilGrade = priceObj.getString("oilGrade");           // get the oilGrade
                String price = priceObj.getString("content");               // get the price

                afterValue = price.replace(',', '.');                       //replace the , with an . to work with a double .
                double priceDouble = Double.parseDouble(afterValue);        //parse the String to a Double
0 голосов
/ 08 марта 2020

Вы можете использовать Java Джексон Джар API в своем приложении для преобразования xml в json формат. Сначала он связывает данные непосредственно с объектом java. Он создает экземпляр XMLMapper и с помощью метода readValue считывает содержимое файла xml. Записывает содержимое в формате JSON с помощью класса ObjectMapper.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...