Roy1209 Ответов: 1

Форматирование файла json в определенном формате


Я создал приложение windows и извлекаю данные из базы данных в datatable.Я использую Newtonsoft json.dll для преобразования данных в формат json.Формат, который я получаю, - это не тот выход, который мне нужен.Мне нужен определенный конкретный формат.Как я могу добиться этого в своем приложении?Я также попытался заменить метод, но безрезультатно.

Мой код приложения ::
<pre lang="c#"> private void button1_Click(object sender, EventArgs e)
        {
            Open_Connection();
            DataTable dt = new DataTable();
            SqlDataAdapter da = new SqlDataAdapter("select ID,Name from TMaster", SQL_Conn);
            da.Fill(dt);
            DataTableToJSONWithJSONNet(dt);
        }

        public string DataTableToJSONWithJSONNet(DataTable table)
        {
            string JSONString = string.Empty;
            JSONString = JsonConvert.SerializeObject(table,Formatting.Indented);
           // JSONString = JSONString.Replace(@"\r","'");
            return JSONString;
        } 


JSON O/P я получаю из приведенного выше кода :
[
  {
    "ID": 1,
    "Name": "TP_G"
  },
  {
    "ID": 2,
    "Name": "TP_S"
  },
  {
    "ID": 3,
    "Name": "TP_Cl"
  },
  {
    "ID": 4,
    "Name": "TPGM"
  }
]



Формат json мне нужен несколько похожий на \ 'id\' таким образом:
{ \'id\': \'27GSPMH5711G1ZO\', \'name\': \'072017\', \'gt\': 3782969.01, \'cur_gt\': 3782969.01, \'b2b\': [ { \'ctin\': \'27GSPMH5711G1ZO\', \'inv\': [ { \'inum\': \'9005\', \'idt\': \'01-07-2017\', \'val\': 729248.16, \'pos\': \'27\', \'rchrg\': \'N\', \'inv_typ\': \'R\', \'itms\': [ { \'num\': 1, \'itm_det\': { \'rt\': 5, \'txval\': 10000, \'camt\': 500, \'samt\': 900 } } ] }  ] } ] }


Что я уже пробовал:

Пробовал string replace, пробовал jsonconvert class различными методами, но безрезультатно.

Richard MacCutchan

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

Roy1209

Так как же мне написать код ?? Должен ли я сначала упорядочить данные в datatable, а затем попытаться преобразовать их в формат json или 1-й сделать преобразование, а затем попытаться привести данные в требуемый формат.

Richard MacCutchan

Он уже находится в формате JSON. Я не понимаю, чего вы добиваетесь.

Mehdi Gholam

Зачем вам это форматирование? Это не допустимая строка json.

Roy1209

Требование api к получению данных в указанном формате

Mehdi Gholam

Ни один api не заставит вас иметь нестандартный json, вы должны ошибиться, проконсультируйтесь с авторами api.

Roy1209

ОК проверит и вернется к вам.

Graeme_Grant

Как и в моем ответе, это подтвердит, является ли какой-либо JSON действительным или нет: JSON Formatter & Validator[^]

Richard Deeming

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

Как вы добираетесь от А до Б?

1 Ответов

Рейтинг:
2

Graeme_Grant

Это не полное решение, а только обращение к данным JSON. формат JSON[^] имеет очень специфическое требование.

Как уже упоминалось в комментариях выше, желаемый вывод не является допустимым форматом. Вы можете проверить это здесь: JSON Formatter & Validator[^]

Исправленный формат должен быть:

{ "id": "27GSPMH5711G1ZO", "name": "072017", "gt": 3782969.01, "cur_gt": 3782969.01, "b2b": [ { "ctin": "27GSPMH5711G1ZO", "inv": [ { "inum": "9005", "idt": "01-07-2017", "val": 729248.16, "pos": "27", "rchrg": "N", "inv_typ": "R", "itms": [ { "num": 1, "itm_det": { "rt": 5, "txval": 10000, "camt": 500, "samt": 900 } } ] }  ] } ] }

Вот читабельный вариант:
{
   "id":"27GSPMH5711G1ZO",
   "name":"072017",
   "gt":3782969.01,
   "cur_gt":3782969.01,
   "b2b":[
      {
         "ctin":"27GSPMH5711G1ZO",
         "inv":[
            {
               "inum":"9005",
               "idt":"01-07-2017",
               "val":729248.16,
               "pos":"27",
               "rchrg":"N",
               "inv_typ":"R",
               "itms":[
                  {
                     "num":1,
                     "itm_det":{
                        "rt":5,
                        "txval":10000,
                        "camt":500,
                        "samt":900
                     }
                  }
               ]
            }
         ]
      }
   ]
}

Глядя на исходные данные и желаемый результат, кажется, что отсутствует много информации.


Roy1209

Как обеспечить заголовка к JSON-данные, такие как идентификатор,имя,ГТ,cur_gt за пределами [] скобках.

Graeme_Grant

Я не понимаю вопроса. [] - это коллекция / массив. Читайте двигайтесь сюда: Спецификация JSON[^]

Roy1209

Данные находятся в datatable (dt) со столбцами gt, cur_gt, id,name

Graeme_Grant

Опять же, вам все еще не хватает полей, соответствующих желаемому выходу JSON.