2014-12-25 2 views
-1

Значение в файле JSON является 75,38 и я whrite код для разбора этого значения в затмении:Преобразование объекта JSON в объект Java

double legacyPremium = (double) object.get("legacyPremium"); 

И я получаю ошибку:

Exception in thread "main" java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Double at com.domain.project.Class.main(Class.java:56) 

JSon файл is:

{ 
    "elementaryProductId":1, 
    "bonusMalus":5, 
    "deductible":100, 
    "comprehensive":1, 
    "partial":0, 
    "legacyPremium":75.38, 
    "product":{ 
     "productId":2, 
     "garage":"true", 
     "constructionYear":2005, 
     "region":"East", 
     "dateOfBirthYoungest":"1999-06-22", 
     "objectValue":30000, 
     "type":"Car", 
     "insuredObject":{ 
      "name":"Car", 
      "ownersName":"Jelena", 
      "mileage":300000, 
      "engineCapacity":210 
     }, 
     "salesProduct":{ 
      "salesProductId":3, 
      "currency":"EUR", 
      "contractStart":"2013-01-01", 
      "contractEnd":"2014-01-01" 
     }, 
     "productType":"Car" 
    } 
}, 

Кто-нибудь знает, в чем проблема?

+1

_and i whrite код для разбора этого значения в eclipse_ Покажите нам это и покажите нам свой JSON. –

+0

Долг v. Двойной, кажется, проблема. –

+1

Я не могу найти 'x' – zzy

ответ

0

Попробуйте использовать

double x = Double.valueOf(object.get("x").toString()); 

вместо

double x = (double) object.get("x"); 

Это освободит вас от литейных проблем. Примите во внимание, что строка должна быть разрешена для двойного типа.

+0

Ошибка: метод valueOf (String) в типе Double не применим для аргументов (Object) – Pepinho

+0

О, извините. Обновленный ответ, должен добавить .toString() для объекта –

+0

Отлично! Спасибо!!! – Pepinho

0

Я бы рекомендовал использовать Google GSON вместо Google json-simple, если вам разрешено выбирать. С помощью этой библиотеки вы можете создать класс, который выглядит так, как вы хотите, чтобы ваш json представлял и читал его и преобразовывал в объект в двух строках кода. Я привел пример ниже:

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 

import com.google.gson.Gson; 

public class Main { 


    public static void main(String[] args) throws IOException{ 
     //Read file into a String 
     BufferedReader reader = new BufferedReader(new FileReader(new File("file.json"))); 
     StringBuilder builder = new StringBuilder(); 
     String line; 
     while((line= reader.readLine()) != null){ 
      builder.append(line); 
     } 
     reader.close(); 
     String jsonAsString = builder.toString(); 

     //Convert String into an MyClass Object 
     Gson gson = new Gson(); 
     MyClass[] myClass = gson.fromJson(jsonAsString, MyClass[].class);//If your json outermost element is an array use this. 


     System.out.println("elementaryProductId = " + myClass[0].elementaryProductId); 
     System.out.println("productId = " + myClass[0].product.productId); 
    } 

    public class MyClass { 
     public int elementaryProductId; 
     public int bonusMalus; 
     public int deductible; 
     public int partial; 
     public double legacyPremium; 
     public Product product; 
    } 

    public class Product { 
     public int productId; 
     public boolean garage; 
     public int constructionYear; 
     public String region; 
     public String dateOfBirthYoungest; 
     public InsuredObject insuredObject; 
     public SalesProduct salesProduct; 
    } 

    public class InsuredObject { 

    } 

    public class SalesProduct{ 

    } 
} 

Обратите внимание, что поля не обязательно должны быть общедоступными! Это десериализация.

Смежные вопросы