Записать строку JSON в файл JSON в правильном формате без использования встроенных методов или сторонних библиотек - PullRequest
0 голосов
/ 30 мая 2020

У меня есть текстовый файл, содержащий данные, и другой текстовый файл, содержащий поля данных. Я могу читать данные и поля данных в отдельный массив

Мне удалось преобразовать его в JsonFormat. Но когда я пишу его в файле json, он не форматируется должным образом, как данные json. Как бы он принял правильный формат? Также я не хочу использовать сериализацию или сторонние библиотеки.

Мой файл входных данных содержит 102 строки, в которых 1-ю и последнюю можно игнорировать. Каждая строка соответствует одной записи. Так что у него около 100 записей. Каждая запись содержит 150 полей, разделенных знаком |.

Пример записи:

928338219 || 3HY83 || A | Z5 | 20030917 | 20160629 | 20150630 | 20150630 | УПРАВЛЕНИЕ ФЕДЕРАЛЬНЫМИ ДОРОГАМИ || УПРАВЛЕНИЕ ПРИОБРЕТЕНИЯМИ И ГРАНТАМИ || 1200 NEW J SE || ВАШИНГТОН | DC | 20590 | 0001 | США | 98 | 19720101 | 0930 || 2A ||| 0003 | 2R ~ NG ~ VW | 926120 | 0001 | 926120N | 0000 |||| 1200 NEW JERSEY AVENUE, SE | НОМЕР E65-101 | ВАШИНГТОН | 20590 | 0001 | США | DC | FRANK WALTOS || WALTOS || 1200 NEW JERSEY AVENUE, SE | НОМЕР E65-312 | ВАШИНГТОН | 20590 | 0001 | США | DC | 2023664205 ||| 2023663705 | Фрэнк. Waltos@dot.gov | FRANK || WALTOS || 1200 NEW JERSEY AVENUE SE | ROOM E65-312 | WASHINGTON | 20590 | 0001 | USA | DC | 2023664205 ||| 2023663705 | Frank. Waltos@dot.gov |||||| ||||||||||||||||||||||||||| FRANK || WALTOS || 1200 NEW JERSEY AVENUE SE | НОМЕР E65-312 | ВАШИНГТОН | 20590 | 0001 | USA | DC | 2023664205 ||| 2023663705 | Frank. Waltos@dot.gov | JASON || JOHNSON || 1200 NEW JERSEY AVENUE SE || WASHINGTON | 20590 | 0001 | USA | DC | 2023665880 ||| 2023663705 | jason. johnson@dot.gov | 0000 || N || 0000 ||| 0000 ||! End

Файл DataFields содержит 150 полей
образец:

DUNS
DUNS + 4
КОД КЕЙДЖИ
DODAA C
КОД ВЫДЕРЖКИ SAM
ЦЕЛЬ РЕГИСТРАЦИИ
ДАТА РЕГИСТРАЦИИ ДАТА ИСТЕЧЕНИЯ

Я ожидаю, что в записях будет написано что-то вроде этого

 {
  "DUNS": "070815200",
  "DUNS+4": "",
  "CAGE CODE": "7HEG5",
  "DODAAC": "",
  "SAM EXTRACT CODE": "A",
  "PURPOSE OF REGISTRATION": "Z2",
  "REGISTRATION DATE": "20151113",
  "EXPIRATION DATE": "20161112",
  "LAST UPDATE DATE": "20151123"
 }

сейчас они пишутся без какого-либо форматирования вроде этого

{"DataFile1": [{"DUNS": "928338219", "DUNS + 4": ""}.

Я проверил свою строку JSON в Jsonlint, и это действительная JSON

public void convertToJSONsyntax( string [] data, string [] dataFields) 
    {
  string[] splitData = new string[150];
        var JSONSyntaxString = "{\"DataFile1\" :[";
        //var json = JsonConvert.DeserializeObject(JSONSyntaxString);
        for (int i=0;i<data.Length; i++) 
        {
            JSONSyntaxString += "{";
            splitData = data[i].Split('|');
            for(int j = 0; j < dataFields.Length; j++)
            {
                if (j == dataFields.Length - 1)
                {
                    JSONSyntaxString += "\"" + dataFields[j] + "\":\"" + splitData[j] + "\"";
                }
                else
                {
                    JSONSyntaxString += "\"" + dataFields[j] + "\":\"" + splitData[j] + "\",";
                }
            }
            if (i == data.Length - 1)
            {
                JSONSyntaxString += "}";
            }
            else
            {
                JSONSyntaxString += "},";
            }
        }
        JSONSyntaxString = JSONSyntaxString + "]}";
        File.WriteAllText("C:\\OutputData.json", JSONSyntaxString);

1 Ответ

0 голосов
/ 30 мая 2020

:) Ладно, так когда вы пишете текст в файл. И вы должны sh это отображать с форматированием текста, вы должны отслеживать само форматирование.

Допустим, у вас есть отступ табуляции, вы хотите применить? Или перевод строки?

Вы должны записать это в форматирование текста.

Примерно так:

 string[] splitData = new string[150];
            var JSONSyntaxString = "{\"\tDataFile1\" :[\r\n";

            for (int i = 0; i < data.Length; i++)
            {
                JSONSyntaxString += "\t\t{\r\n";
                splitData = data[i].Split('|');
                for (int j = 0; j < dataFields.Length; j++)
                {
                    if (j == dataFields.Length - 1)
                    {
                        JSONSyntaxString += "\t\t\t\"" + dataFields[j] + "\":\"" + splitData[j] + "\"";
                    }
                    else
                    {
                        JSONSyntaxString += "\t\t\t\"" + dataFields[j] + "\":\"" + splitData[j] + "\",\r\n";
                    }
                }
                if (i == data.Length - 1)
                {
                    JSONSyntaxString += "\r\n\t\t}\r\n";
                }
                else
                {
                    JSONSyntaxString += "\r\n\t\t},\r\n";
                }
            }
            JSONSyntaxString = JSONSyntaxString + "]}";
            File.WriteAllText("E:\\Test\\OutputData.json", JSONSyntaxString);

\ t = tab

\ r \ n = Newline.

С моими ошибочными данными тестов, которые дали мне такой результат:

{"  DataFile1" :[
        {
            "Key":"SomeValueForKey",
            "Key2":"SomeValueForKey2"
        },
        {
            "Key":"SomeValueForKeyForAnotherItem",
            "Key2":"SomeOtherValueForAnotherItem2"
        }
]}

Я надеюсь, что этого достаточно, чтобы вы сами смогли преодолеть финишную черту:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...