2016-05-29 55 views
0

我試圖解析此JSON文檔:JSON解析與瓦拉

{ 
    "registration" : "F-FBZH", 
    "model" : "DR400-120" 
} 

這是我編:

public Plane load_airplane (string registration) { 
    try { 
     string? res = null; 
     var file = File.new_for_path (location + registration + ".json"); 

     if (file.query_exists()) { 
      var dis = new DataInputStream (file.read()); 
      string line; 

      while ((line = dis.read_line (null)) != null) { 
       res += line; 
      } 

      var parser = new Json.Parser(); 
      parser.load_from_data (res); 
      var root_object = parser.get_root().get_object(); 

      string data_registration = root_object.get_string_member ("registration"); 
      string data_model = root_object.get_string_member ("model"); 

      return new Plane (data_registration, data_model); 
     } 
    } catch (Error e) { 
     stderr.printf ("%s\n", e.message); 
    } 
    return new Plane.default(); 
} 

它編譯沒有任何問題,但是當我的午餐節目我得到這些錯誤:

(process:25868): Json-CRITICAL **: json_parser_load_from_data: assertion 'data != NULL' failed 

(process:25868): Json-CRITICAL **: json_node_get_object: assertion 'JSON_NODE_IS_VALID (node)' failed 

(process:25868): Json-CRITICAL **: json_object_get_string_member: assertion 'object != NULL' failed 

(process:25868): Json-CRITICAL **: json_object_get_string_member: assertion 'object != NULL' failed 

** (process:25868): CRITICAL **: open_plane_plane_construct: assertion 'registration != NULL' failed 

** (process:25868): CRITICAL **: open_plane_plane_get_registration: assertion 'self != NULL' failed 
(null) 

爲什麼?另一個問題是,爲什麼用中級語言Vala閱讀JSON很困難?它應該更容易!

+0

你不必使用'DataInputStream',你可以調用'file.load_contents()'。 –

+0

如果你有一個最近的'valac'和'json-glib-1.0'軟件包,你也可以使用'Json.from_string()'。它也會爲你節省一些LOC。 –

回答

2

問題是,您正在初始化可空的res字符串爲空。

如果您隨後向字符串添加某些內容,它將保持爲空。

string? res = null; 
res += "something"; 
// res will still be null here! 

您可以初始化它當作""(空字符串,並在這種情況下,你可以使用非可空字符串,以及),或者你可以跳過產品總數的DataInputStream和使用file.load_contents()

+1

或者你可以使用'Json.Parser.load_from_stream()'。 – ebassi

+0

謝謝Jens,你解決了我的問題! – Wizix

+0

嗨Jens,你是否有鏈接/資源來幫助我理解如何在vala中使用JSON?謝謝 – omukiguy