2017-01-24 3 views
1

У меня есть строка, которую я получаю от веба-сервиса, который выглядит следующим образом:Преобразование неотформатированная строки (не действительный JSON), чтобы JSon

({ 
id=1; 
name="myName"; 
position="5"; 
}) 

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

{ 
"id":1, 
"name":"myName", 
"position":"5" 
} 
+0

О, это даже не действительный JSON? –

+0

@AmitKumarGhosh Нет, это не – m0j1

ответ

0

Вы, холодный, запускаете множество регулярных выражений для каждого изменения. Но вам понадобятся записи для имен свойств и т. Д. Производительность будет ужасной.

Если формат известен и надежный (например, что происходит с коллекциями/массивами и под-объектами). И поставщик услуг не предоставляет клиента или SDK. Тогда лучше всего написать собственный парсер. Это не так сложно создать с нуля. Или вы можете использовать библиотеку парсера, такую ​​как Irony.net или eto.parse. Оба из них позволяют построить грамматику в C#, поэтому она полностью автономна без необходимости компилятора-компилятора и сгенерированного кода. Существует также класс парсера, называемый «монадическими» парсерами, такими как Sprache, которые имеют более простой характер (как только вы обнимаете их вокруг себя).

Какой бы подход ни применялся, вы получите способ распознавания каждой границы свойства и объекта, где вы можете делать то, что вам нужно сделать: установить свойство; создать JToken; независимо от того, ...

Затем вы можете обернуть всю партию в MediaTypeFormatter и позвонить в службу через HttpClient и получить объекты.

0

Наконец-то я должен был написать свою собственную функцию, чтобы преобразовать его в оформленной JSON, вот функция, которую я написал:

public string convertToJson(string mJson) 
{ 
    mJson = mJson.Replace("(","["); 
    mJson = mJson.Replace(")","]"); 
    string mJson2 = mJson.Trim('[',']'); 
    string[] modules = mJson2.Split(','); 
    for(int i = 0;i<modules.Length;i++) 
    { 
     Debug.Log("module["+i+"]: " + modules[i]); 
    } 
    for(int m=0;m<modules.Length;m++) 
    { 

     char[] mCharacter = {'{','}'}; 
     modules[m] = modules[m].Replace("{",string.Empty).Replace("}",string.Empty).Trim(); 
     Debug.Log("module["+m+"] after trim: " + modules[m]); 

     string[] items = modules[m].TrimEnd(';').Split(';'); 
     modules[m] = "{"; 
     for(int j=0;j<items.Length;j++) 
     { 
      Debug.Log("item["+j+"]: " + items[j]); 
      string[] keyValue = items[j].Split('='); 
      Debug.Log("key,value: " + keyValue[0] + ", " + keyValue[1]); 
      modules[m] = modules[m] + "\"" + keyValue[0].Trim() + "\":" + keyValue[1].Trim() + ","; 
     } 
     modules[m] = modules[m].Substring(0,modules[m].Length-1) + "}"; 
     Debug.Log("modules["+m+"] final: " + modules[m]); 
    } 
    string finalJson = "["; 
    for(int m=0;m<modules.Length;m++) 
    { 
     finalJson = finalJson + modules[m] + ","; 
    } 
    finalJson = finalJson.Substring(0,finalJson.Length-1) + "]"; 
    Debug.Log("finalJson: " + finalJson); 
    return finalJson; 
} 
Смежные вопросы