PyYaml到SnakeYaml— AWT-EventQueue-0“无法为标记构造java对象:yaml.org,2002:java / object:

我正在将使用PyYaml创建的Yaml传递给SnakeYaml,而Snakeyaml似乎没有认识到超出第一行的地方!存在并声明python / object。我已经在Java中设置了相同的对象。是否有一个示例将loadAll显示到对象数组中,其中对象类型被声明或分配? 好的电话......我最初发布时远离电脑。 以下是来自PyYaml的数据,我试图使用SnakeYaml进入Java应用程序:
--- !!python/object:dbmethods.Project.Project {dblogin: kirtstrim7900, dbname: 92218kirtstrim_wfrogls,dbpw: 1234567895#froggy, preference1: '', preference2: '', preference3: '', projName: CheckPoint Firewall Audit - imp, projNo: 1295789430544+CheckPoint Firewall Audit - imp, projectowner: kirtcathey@sysrisk.com,result1label: Evidence, result2label: Recommend, result3label: Report, resultlabel: Response,role: owner, workstep1label: Objective, workstep2label: Policy, workstep3label: Guidance,worksteplabel: Procedure}
不仅仅是上面的一个实例,而是几个对象,所以需要在SnakeYaml中使用loadAll ....除非有人知道更好。 至于代码,这是我从SnakeYaml文档获得的全部内容:
for (Object data : yaml.loadAll(sb.toString())) {   
    System.out.println(data.toString());
}
然后,抛出此错误:
Exception in thread "AWT-EventQueue-0" Can't construct a java object for tag:yaml.org,2002:java/object: ...... 
Caused by: org.yaml.snakeyaml.error.YAMLException: Class not found: ......
正如您从小代码片段中看到的那样,即使没有提供所有这些信息,任何知道如何任意抛出对象的答案的人都可以回答这个问题。 谢谢。 在每个条目的开头解析了两个感叹号(!!),现在我得到: 这里不允许映射值  在“”,第1行,第73栏: 作为一个错误。使用YAML的重点是减少与解析相关的编码。如果我因任何原因需要转身并解析传入和传出的代码,那么YAML很糟糕!并且很乐意恢复XML或其他任何允许python中间件与java应用程序通信的东西。     
已邀请:
要获得相同的结果,您可以: 配置PyYAML以跳过标记(与注释“将对象转换为其表示的字典”完全相同) 配置SnakeYAML来创建你期望的对象(就像你对“projectData = gson.fromJson(mystr,ProjectData [] .class);”所做的那样 如果你迷路了(在你说“很糟糕”之前),你可以在相应的邮件列表中提问。它可能会帮助您在将来找到合适的解决方案。     
固定。 YAML很糟糕,所以不要使用它。关于SnakeYAML是如何从PyYaml派生出来的各种Google结果,但没有人清楚地说明PyYaml的转储格式与SnakeYAML的loadAll例程有什么关系。 此外,使用YAML的性能很可怕,JSON更简单,更容易实现。在我们的中间件所在的Python中(并且发生了大多数运算),YAML的处理时间几乎是JSON的两倍! 如果您使用的是Python 2.6或更高版本,请
 import json
    json_doc = json.dumps(projects, default=convert_to_builtin_type)
                    print json_doc
  def convert_to_builtin_type(obj):
     print 'default(', repr(obj), ')'
     # Convert objects to a dictionary of their representation
     d = { '__class__':obj.__class__.__name__,
          '__module__':obj.__module__,
          }
     d.update(obj.__dict__)
     return d
然后在Java客户端(加载)方面,使用GSon - 这需要大量的头脑和搜索才能弄明白,因为'网上的所有示例实际上都是无用的。每个博客每页有500个广告,向您展示如何转换一个单一的,愚蠢的对象,上次我创建一个应用程序,我使用列表,数组或任何持有多个对象的东西!
try {
    serverAddress = new URL("http://127.0.0.1:5000/projects/" + ruser.getUserEmail()+"+++++"+ruser.getUserHash());
    //set up out communications stuff
    connection = null;

    //Set up the initial connection
    connection = (HttpURLConnection)serverAddress.openConnection();
    connection.setRequestMethod("GET");
    connection.setDoOutput(true);
    connection.setReadTimeout(100000);

    connection.connect();

    //get the output stream writer and write the output to the server
    //not needed in this example

    rd  = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    sb = new StringBuilder();

    while ((line = rd.readLine()) != null)
    {
       sb.append(line + 'n');
    }
    String mystr = sb.toString();
    // Now do the magic.
    Gson gson = new Gson();
    projectData = gson.fromJson(mystr, ProjectData[].class);    
} catch (MalformedURLException e) {
    e.printStackTrace();
} catch (ProtocolException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}
finally
{
    //close the connection, set all objects to null
    connection.disconnect();
    rd = null;
    sb = null;
    connection = null;
}


return projectData;
完成!简而言之 - YAML糟透了并使用JSON !!此外,http连接代码大部分都是从这个网站上删除的...现在我需要弄清楚https。     

要回复问题请先登录注册