Разбор Yaml из конфигурационного файла - PullRequest
2 голосов
/ 23 января 2012

Это первый раз, когда я использую синтаксический анализатор YAML, и в данный момент я застрял в этой точке

У меня есть файл конфигурации, который выглядит примерно так:

Users
 -Name:A
  Id : x
  Addr:10.0.0.1
 -Name:B
  Id  :y
  Addr:10.0.0.2

HomeAddress
 City:bla bla
 Country:bla bla

Office Address
 City:abchd
 Country:bha bha ba

Так что я подумаллучший способ разобрать это было бы иметь такой список.

List<Map<String, obj>> Object = (List<Map<String, obj>>) yaml.load(input);

Цель состояла в том, чтобы получить доступ к объекту, указав строку.Как и имя пользователя А, я смогу получить его идентификатор и IP-адрес (это наиболее важно для меня на данный момент).Но когда я попробовал эту декларацию, я получил такую ​​ошибку

Exception in thread "main" java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to java.util.List
    at Message.MessagePasser.<init>(MessagePasser.java:34)

Может кто-нибудь помочь мне отладить это.Я бегу к крайнему сроку !!: (

Ответы [ 2 ]

3 голосов
/ 23 января 2012

Кажется, что синтаксический анализатор YAML возвращает Map.Таким образом, вы должны использовать его следующим образом:

Map config = (Map) yaml.load(input);
Map usersConfig = config.get("Users");

Также, какой конкретный парсер YAML вы используете?

Обновление 1: Если вы посмотрите документацию , метод load возвращает List или Map в зависимости от содержимого вашего файла YAML.Поскольку ваш файл YAML начинается с сопоставления значения ключа (Users), а не с массива (-), метод load возвращает Map, который является подходящим типом, который должен быть возвращен в этом случае.

1 голос
/ 01 февраля 2012

1) проверьте срок действия вашего YAML здесь: http://instantyaml.appspot.com/

2) Ваш документ должен выглядеть следующим образом: (обратите внимание на пробелы!)

Users : 
 - Name : A
   Id : x
   Addr : 10.0.0.1
 - Name : B
   Id   : y
   Addr : 10.0.0.2
...