2012-01-23 12 views
2

Это первый раз я использую YAML парсер и я в настоящее время застрял в этой точке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); 

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

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

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

ответ

3

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

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

Кроме того, что особенно YAML парсер вы используете

?

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

+0

Я использую SnakeYaml Parser – ExceptionHandler

+0

Пожалуйста, смотрите! обновленный ответ. – Behrang

+0

Благодарим вас за разъяснение. Принимая ваш совет по этому вопросу, я изменил свой код на что-то вроде «Map obj = (Map ) yaml.load (input);' Но, несмотря на это, у меня есть ошибка, которая говорит он не может использовать java.util.ArrayList для типа NodeIP (который является классом, определенным мной). Так можете ли вы предложить некоторые изменения на этом? – ExceptionHandler

1

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 
+1

Ваш валидатор больше не работает, вот еще один: http://www.yamllint.com/. Кроме того, хорошее форматирование, по-видимому, устраняет пробелы между ключевыми словами, а «:» и «-» должно быть на пустой строке с атрибутами, входящими в CR LF. – Alex

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