2016-08-25 9 views
1

Я сохраняю данные в своей базе данных cassandra как строку, и я хочу получить строку и преобразовать ее в json. я получаю исключение, говоряJson Object parse error

необработанное исключение типа «Newtonsoft.Json.JsonReaderException» произошло

там что-то не так с данными, хранящимися? или я делаю что-то другое неправильно?

Мой запрос:

INSERT INTO table2(key1,col1) values ('5',{'url':'{"hello": 
    {"hi":{"hey":"1","time":"5"}}, 
    {"reg":{"hey":"1","time":"1"}}, 
    {"install":{"hey":"0"}}}, 
    "task":"1","retry":"00", 
    "max":"5","call":"140"'}); 


In my db when i click the map<text,text> column, it gets stored as : 

{\"hello\":\r\n  
    {\"subscription_atrisk\":{\"hey\":\"1\",\"time\":\"100\"}}, 
    {\"reg\":{\"hey\":\"1\",\"time\":\"2000\"}}, 
\"task\":\"0\",\"retry\":\"300\",\"max\":\"5\",\"call\":\"14400\"} 

в моей C# код, я стараюсь

string s = "{\"hello\":\r\n {\"subscription_atrisk\":{\"hey\":\"1\",\"time\":\"100\"}},{\"reg\":{\"hey\":\"1\",\"time\":\"2000\"}},\"task\":\"0\",\"retry\":\"300\",\"max\":\"5\",\"call\":\"14400\""; 
Jobject json = Jobject.Parse(s); //Get an Error here. 

Может кто-нибудь, пожалуйста, пролить некоторый свет на это?

+0

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

+0

Я до сих пор получаю эту ошибку –

+2

Ваш json недействителен, не формируйте его вручную. создайте объект и сериализуйте его, чтобы получить действительный json .... –

ответ

1

Похоже, вы пропустили закрывающий } Try:

string s = "{\"hello\": {\"subscription_atrisk\":{\"hey\":\"1\",\"time\":\"100\"}}, \"missing_key\": {\"reg\":{\"hey\":\"1\",\"time\":\"2000\"}},\"task\":\"0\",\"retry\":\"300\",\"max\":\"5\",\"call\":\"14400\"}"; 
+0

Я до сих пор получаю эту ошибку –

+0

да, проскользнул, прошел мимо меня, но у вас тоже отсутствует ключ. Я положил его как «missing_key» – Kurt

+0

Я не пропускаю ни одного ключа, вот как он –

1

В JSON, объект должен содержать ключ и либо значениеили другой объект/массив. У вас есть синтаксические ошибки в вашем объекте JSON. Прежде всего, всегда используйте двойные кавычки.

Затем ... Объект url имеет ключ Hello, но тогда, когда вы должны разместить еще два ключа, вы просто кладете туда еще два объекта, как если бы это был массив.

Это может быть правильный синтаксис:

{ 
"url": { 
    "hello": { 
     "hi": { 
      "hey": "1", 
      "time": "5" 
     } 
    }, 
    "MissingKey1":{ 
     "reg": { 
      "hey": "1", 
      "time": "1" 
     } 
    }, 
    "MissingKey2":{ 
     "install": { 
      "hey": "0" 
     } 
    } 
}, 
"task": "1", 
"retry": "00", 
"max": "5", 
"call": "140" 
} 

Или, если вы на самом деле имел в виду, чтобы иметь hello объект и массив более двух объектов внутри url:

{ 
"url": { 
    "hello": { 
     "hi": { 
      "hey": "1", 
      "time": "5" 
     } 
    }, 
    "AnArray": [{ 
     "reg": { 
      "hey": "1", 
      "time": "1" 
     } 
    }, { 
     "install": { 
      "hey": "0" 
     } 
    }] 
}, 
"task": "1", 
"retry": "00", 
"max": "5", 
"call": "140" 

} 

Я полагаю, что перед вами храните эти объекты JSON в базе данных, ВСЕГДА проверяйте их, чтобы убедиться, что они действительны для синтаксиса.

Или еще лучше: эта библиотека Newtonsoft предоставляет функции, которые сериализуют (создает) строки JSON из других объектов. См. JsonConvert.SerializeObject Method

В целом, это хорошая идея оглянуться в документации API, это действительно может сэкономить вам много времени, так что вам не придется делать ненужную работу.