Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.02.2019, 15:13
Аспирант
Отправить личное сообщение для Asew Посмотреть профиль Найти все сообщения от Asew
 
Регистрация: 24.08.2018
Сообщений: 30

Json парсинг
Есть json файл (длина изначально не известна):
var data =  [
{
"type":1,
"date":"2018-01-17 11:00:00",
"name":"Petrov"
},
{
"type":1,
"date":"2018-01-17 12:00:00",
"name":"Ivanov"
},
{
"type":2,
"date":"2018-01-17 11:00:00",
"name":"Vasiliev"
},
{
"type":2,
"date":"2018-01-17 12:00:00",
"name":"Zaycev"
}....

+ есть json из значений (количество значений равно количеству типов):
{
"value":1
},
{
"value":2
}


Нужно составить массив из значений для типа = 1, типа = 2 через запятую и т.д. (всего 15 типов, но какие из 15 будут неизвестно!) + дополнить значением, т.е. вот что должно получиться на выходе.

-- для типа 1
var new_par_1 = [
names: ["Petrov", "Ivanov"] ,
dates: ["2018-01-17 11:00:00", "2018-01-17 12:00:00"],
values: 1

]
, //ввод разделяителя
-- для типа 2
var new_par_2 = [
names: ["Vasiliev", "Zaycev"] ,
dates: ["2018-01-17 11:00:00", "2018-01-17 12:00:00"],
values: 2

]

Последний раз редактировалось Asew, 08.02.2019 в 15:15.
Ответить с цитированием
  #2 (permalink)  
Старый 08.02.2019, 15:50
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

let data = [
  {
    "type": 1,
    "date": "2018-01-17 11:00:00",
    "name": "Petrov"
  },
  {
    "type": 1,
    "date": "2018-01-17 12:00:00",
    "name": "Ivanov"
  },
  {
    "type": 2,
    "date": "2018-01-17 11:00:00",
    "name": "Vasiliev"
  },
  {
    "type": 2,
    "date": "2018-01-17 12:00:00",
    "name": "Zaycev"
  }
]

let result = data.reduce((p, c, i, a) => {
  !p[c.type] && (p[c.type] = {
    names: [],
    dates: [],
    values: 0
  })
  p[c.type].names.push(c.name)
  p[c.type].dates.push(c.date)
  p[c.type].values++
  return p
}, {})

// перебрать
Object.entries(result).forEach(([key, value]) => console.log(key, value))


и
var new_par_1 = [
names: ["Petrov", "Ivanov"]...


Так не может быть, те, в массиве не может быть key:value, может быть только value
Ответить с цитированием
  #3 (permalink)  
Старый 08.02.2019, 16:00
Аспирант
Отправить личное сообщение для Asew Посмотреть профиль Найти все сообщения от Asew
 
Регистрация: 24.08.2018
Сообщений: 30

Спасибо, но вы value считаете. А я привел json файл из value, и надо по type проверку делать чтоб присвоить нужный ....
Ответить с цитированием
  #4 (permalink)  
Старый 08.02.2019, 16:22
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

) какой вопрос, такой ответ...

let data = [
  {
    "type": 1,
    "date": "2018-01-17 11:00:00",
    "name": "Petrov"
  },
  {
    "type": 1,
    "date": "2018-01-17 12:00:00",
    "name": "Ivanov"
  },
  {
    "type": 2,
    "date": "2018-01-17 11:00:00",
    "name": "Vasiliev"
  },
  {
    "type": 2,
    "date": "2018-01-17 12:00:00",
    "name": "Zaycev"
  }
]

let values = [
  {
    value: 1,
  },
  {
    value: 2,
  }
]

let result = data.reduce((p, c, i, a) => {
  !p[c.type] && (p[c.type] = {
    names: [],
    dates: [],
    values: 0
  })
  p[c.type].names.push(c.name)
  p[c.type].dates.push(c.date)
  return p
}, {})

// перебрать
Object.entries(result).forEach(([key, value], i) => result[key].values = values[i] ? values[i].value : null)

console.log(result)


уже отсюда видно, такой подход будет вызывать анальные муки
Ответить с цитированием
  #5 (permalink)  
Старый 08.02.2019, 16:40
Аспирант
Отправить личное сообщение для Asew Посмотреть профиль Найти все сообщения от Asew
 
Регистрация: 24.08.2018
Сообщений: 30

Классно, сработало, теперь все же как сформировать набор var-ов, нужно для графика на самом деле..

let data = [

  {

    "type": 1,

    "date": "2018-01-17 11:00:00",

    "name": "Petrov"

  },

  {

    "type": 1,

    "date": "2018-01-17 12:00:00",

    "name": "Ivanov"

  },

  {

    "type": 2,

    "date": "2018-01-17 11:00:00",

    "name": "Vasiliev"

  },

  {

    "type": 2,

    "date": "2018-01-17 12:00:00",

    "name": "Zaycev"

  }

]

 

let values = [

  {

    value: 1,

  },

  {

    value: 2,

  }

]

 

let result = data.reduce((p, c, i, a) => {

  !p[c.type] && (p[c.type] = {

 
	labels :  [],

	datasets : [
		{
			fillColor : "rgba(220,220,220,0.5)",
			strokeColor : 0,
			pointColor : 0,
			pointStrokeColor : "#fff",
			data : [],
      			title : "описание"
		}
	]



  })

  p[c.type].labels.push(c.name)

  p[c.type].data.push(c.date)

  return p

}, {})

 

// перебрать

Object.entries(result).forEach(([key, value], i) => result[key].pointColor = values[i] ? values[i].value : null)

 

console.log(result)


Таким образом нужно сформировать пары х/y разделенные через запятую и блок let должен быть отличающийся по названию

Последний раз редактировалось Asew, 08.02.2019 в 16:57.
Ответить с цитированием
  #6 (permalink)  
Старый 08.02.2019, 16:56
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

зачем кучу варов? если есть объект, ну и передавай вместо варов куски объекта, например, result[1], result[2]...

подожду переводчика...
Ответить с цитированием
  #7 (permalink)  
Старый 08.02.2019, 18:10
Аспирант
Отправить личное сообщение для Asew Посмотреть профиль Найти все сообщения от Asew
 
Регистрация: 24.08.2018
Сообщений: 30

Разобрался, спасибо большое!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсинг json с двойными кавычками llpoolerll jQuery 9 29.06.2016 17:28
Парсинг Json Sabir AJAX и COMET 1 27.01.2016 13:22
Парсинг JSON c # devastor Серверные языки и технологии 3 05.10.2014 16:51
Парсинг JSON на Node.js l0ck3R AJAX и COMET 2 12.11.2013 15:22
Парсинг JSON массива со скобками [ ] lightdesign jQuery 1 24.04.2011 15:35