Nodejs - парсинг строки в объект JSON - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь получить пример файла json, используя fs.readFile и fs.read в nodejs.Это тестовый файл json, который я читаю

{
    "HttpTestResponse":
        [
          { 
             "title":"testTitle2",
             "id": 2,
             "name":"testName3",
             "testArray":[{"testProp1":"testPropVal2","testProp2":"testPropVal_2"}]
          },
          {
            "title":"testTitle3",
            "id": 3,
            "name":"testName3",
            "testArray":[{"testProp1":"testPropVal3","testProp2":"testPropVal_3"}]
          }
        ]


}

Это пример функции (я использую машинопись с nodejs для более строгой типизации)

getJSONFromFile(paramId) {
    let obj: HttpTestModel[];
    fs.exists(this.resolvedUrl, exists => {
      if (exists) {
        fs.readFile(this.resolvedUrl, 'utf-8', (err, data) => {
          if (err) {
            this.pino.info('error while reading the file', err);
          } else {
            this.pino.info('data', JSON.parse(data));
            // tslint:disable-next-line:one-variable-per-declaration
            // tslint:disable-next-line:prefer-const
            // tslint:disable-next-line:one-variable-per-declaration
            obj = JSON.parse(data);
            this.pino.info('plain data', data);
            this.pino.info('data in parseJSON', parseJson(data));
          }
        });
      }
    });
  }

Это вывод, который яполучить.Я использую модуль Pino и, следовательно, вывод имеет некоторые уровни по умолчанию и временные метки

{"level":30,"time":1550563397320,"msg":"plain data {\r\n    \"HttpTestResponse\":\r\n        [\r\n
{ \r\n             \"title\":\"testTitle2\",\r\n             \"id\": 2,\r\n             \"name\":\"testName3\",\r\n             \"testArray\":[{\"testProp1\":\"testPropVal2\",\"testProp2\":\"testPropVal_2\"}]\r\n
      },\r\n          {\r\n            \"title\":\"testTitle3\",\r\n            \"id\": 3,\r\n            \"name\":\"testName3\",\r\n            \"testArray\":[{\"testProp1\":\"testPropVal3\",\"testProp2\":\"testPropVal_3\"}]\r\n          }\r\n        ]\r\n        \r\n    \r\n}","pid":21212,"hostname":"INDV072294","v":1}


{"level":30,"time":1550563397321,"msg":"stringifed data {\r\n    \"HttpTestResponse\":\r\n        [\r\n
     { \r\n             \"title\":\"testTitle2\",\r\n             \"id\": 2,\r\n             \"name\":\"testName3\",\r\n             \"testArray\":[{\"testProp1\":\"testPropVal2\",\"testProp2\":\"testPropVal_2\"}]\r\n          },\r\n          {\r\n            \"title\":\"testTitle3\",\r\n            \"id\": 3,\r\n
   \"name\":\"testName3\",\r\n            \"testArray\":[{\"testProp1\":\"testPropVal3\",\"testProp2\":\"testPropVal_3\"}]\r\n          }\r\n        ]\r\n        \r\n    \r\n}","pid":21212,"hostname":"INDV072294","v":1}


{"level":30,"time":1550563397322,"msg":"data in parseJSON {\"HttpTestResponse\":[{\"title\":\"testTitle2\",\"id\":2,\"name\":\"testName3\",\"testArray\":[{\"testProp1\":\"testPropVal2\",\"testProp2\":\"testPropVal_2\"}]},{\"title\":\"testTitle3\",\"id\":3,\"name\":\"testName3\",\"testArray\":[{\"testProp1\":\"testPropVal3\",\"testProp2\":\"testPropVal_3\"}]}]}","pid":21212,"hostname":"INDV072294","v":1}

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

Может ли кто-нибудь помочь мне в этом?

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Приведенный выше ответ отлично работает для пользователей, использующих js.Если вы намереваетесь использовать ts, то вам следует выполнить небольшую модификацию и выполнить следующие рекомендации.

Сначала установите типы (определение типа класса для pino).

npm install -S@ types / pino

Затем установите pino, как указано выше

Теперь создайте отдельный файл с именем logger.ts и экспортируйте конфигурацию предварительного отпечатка pino следующим образом

import * as pino from 'pino';

export const logger = pino({
  name: 'prj-sample',
  prettyPrint: {
    levelFirst: true,
  },
});

Теперь вы можете импортировать const в любом месте вашего кода и использовать его

import { logger } from './../../../shared/utils/logger';
.....
.....
.....
getJSONFromFile(paramId) {
    let obj;
    fs.exists(this.resolvedUrl, exists => {
      if (exists) {
        fs.readFile(this.resolvedUrl, 'utf-8', (err, data) => {
          if (err) {
            logger.info('error while reading the file', err);
          } else {
            obj = JSON.parse(data);
            logger.info('data data :', obj.HttpTestResponse);
            logger.info('data is', JSON.parse(data));
            logger.info(JSON.parse(data));
            logger.info(data);
          }
        });
      }
    });
  }
0 голосов
/ 19 февраля 2019

Вы можете использовать pino-pretty, который является плагином или модулем pino.

npm i -S pino pino-pretty

Пример кода, подобный следующему:

const pino = require('pino')
const logger = pino({
    prettyPrint: {
        levelFirst: true,
    },
})
const filePath = '' // 

fs.exists(filePath, exists => {
    if (exists) {
        fs.readFile(filePath, 'utf-8', (err, data) => {
            if (err) {
            } else {
                const obj = JSON.parse(data);
                logger.info('data', JSON.parse(data));
                logger.info(JSON.parse(data));
                logger.info(data);
            }
        });
    }
});

выход логгера

INFO  [1550565533231] (19285 on aa-pc): data {"HttpTestResponse":[{"title":"testTitle2","id":2,"name":"testName3","testArray":[{"testProp1":"testPropVal2","testProp2":"testPropVal_2"}]},{"title":"testTitle3","id":3,"name":"testName3","testArray":[{"testProp1":"testPropVal3","testProp2":"testPropVal_3"}]}]}


INFO  [1550565533233] (19285 on aa-pc):
    HttpTestResponse: [
      {
        "title": "testTitle2",
        "id": 2,
        "name": "testName3",
        "testArray": [
          {
            "testProp1": "testPropVal2",
            "testProp2": "testPropVal_2"
          }
        ]
      },
      {
        "title": "testTitle3",
        "id": 3,
        "name": "testName3",
        "testArray": [
          {
            "testProp1": "testPropVal3",
            "testProp2": "testPropVal_3"
          }
        ]
      }
    ]

INFO  [1550565533234] (19285 on aa-pc): {
"HttpTestResponse":
[
{
"title":"testTitle2",
"id": 2,
"name":"testName3",
"testArray":[{"testProp1":"testPropVal2","testProp2":"testPropVal_2"}]
},
{
"title":"testTitle3",
"id": 3,
"name":"testName3",
"testArray":[{"testProp1":"testPropVal3","testProp2":"testPropVal_3"}]
}
]

}


Вы можете попробовать это сами.хахаха

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