2017-01-05 3 views
0

Я пытаюсь десериализацией файла, содержащего набор данных объектов JSON, не разделенных запятымиКак десериализация файла с своеобразным набором данными из JSON объекты

{ 
"passages": [ 
     { 
      "is_selected": 1, 
      "url": "http://someUrl.com", 
      "passage_text": "someTextHere" 
     }, 
     { 
      "is_selected": 0, 
      "url": "http://someUrl.com", 
      "passage_text": "someTextHere"" 
     }, 
      ], 
       "query_id": 9749, 
       "answers": ["Here is the answer"], 
       "query_type": "description", 
       "query": "Here is my query" 
} 

{ 
"passages": [ 
     { 
      "is_selected": 0, 
      "url": "http://someAnotherUrl.com", 
      "passage_text": "someAnotherTextHere" 
     }, 
     { 
      "is_selected": 1, 
      "url": "http://someAnotherUrl.com", 
      "passage_text": "someAnotherTextHere"" 
     }, 
      ], 
       "query_id": 0564, 
       "answers": ["Here is the another answer"], 
       "query_type": "another description", 
       "query": "Here is my another query" 
} 

Я пытаюсь использовать этот код с Newtonsoft.JSON десериализации, но она возвращает исключение

«необработанное исключение типа„Newtonsoft.Json.JsonSerializationException“произошло в Newtonsoft.Json.dll

Дополнительная информация: не может десериализации текущий объект JSON (например, { "name": "value"}) i nto type 'System.Collections.Generic.List`1 [JsonParser.DataSet]', потому что для этого типа требуется массив JSON (например, [1,2,3]), чтобы правильно десериализации.»

public class DataSet 
{ 
    public List<Passage> passages { get; set; } 
    public int query_id { get; set; } 
    public List<string> answers { get; set; } 
    public string query_type { get; set; } 
    public string query { get; set; } 
    public int Count { get; internal set; } 
} 

public class Passage 
{ 
    public int is_selected { get; set; } 
    public Uri url { get; set; } 
    public string passage_text { get; set; } 
} 

class Program 
{ 
    public static string jsonFileLocation = @"C:\my.json"; 

    static void Main(string[] args) 
    { 
     using (StreamReader file = File.OpenText(jsonFileLocation)) 
     { 
      JsonSerializer serializer = new JsonSerializer(); 
      List<DataSet> data = (List<DataSet>)serializer.Deserialize(file, typeof(List<DataSet>));         
     } 
    } 
} 

Я не думаю, что это хорошая идея, чтобы поставить запятые и скобки вручную, чтобы привести файл в формате JSON, потому что этот файл содержит несколько тысяч записей. У вас есть идеи, как разбирать и десериализовать этот файл?

+1

Ваш json недействителен, поэтому вам нужно как-то его исправить (вручную, регулярное выражение и т. Д.), Если вы хотите использовать json serializer ... –

+1

Я уверен, что единственный вариант - исправить файл. Это или забудьте про разбор его с помощью любого анализатора JSON. –

ответ

1

Если файл согласован в том, что каждый узел JSON разделен новым символом строки, вы можете сначала передать файл в System.String и заменить все экземпляры :

} 

{ 

с:

}, 
{ 

Затем десериализуйте строку JSON. Это всего лишь одна идея.

+0

В значительной степени это то, что нужно сделать, или чтобы сделать его более устойчивым, поиск можно было бы расширить, включив «проходы»: ['(если это единственное ключевое слово, где есть ошибки). –

+0

Справа. Я должен был также указать, что файл является неправильным JSON, и любое решение будет содержать какой-то «хак» для исправления файла. Будь то руководство или код в коде –

+0

И я согласен с вами, Питер, чтобы убедиться, что случайные замены не произойдут –

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