2016-05-29 27 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