Форум программистов, компьютерный форум, киберфорум
Go (Golang)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
 Аватар для drvolodko
224 / 68 / 33
Регистрация: 23.05.2014
Сообщений: 752

Получить данные из массива в формате JSON

29.09.2021, 11:34. Показов 2614. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго дня всем.
Проблема: не могу вытащить данные из файла в формате JSON, потому, как совсем не знаю как
Сам файл:
JSON
1
{"hi":[{"hello":"Всем привет"}]}
Файл передаю методом POST из Delphi и пытаюсь прочитать его в GO (это уже хз какой по счёту вариант)
Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
type Role struct {
    RoleName string `json:"hello"`
}
 
func (mdb *MyDatabase) ReturnAddRole(c echo.Context) (err error) {
    var (
        bdy []byte
        s   string
    )
 
    defer c.Request().Body.Close()
    bdy, err = ioutil.ReadAll(c.Request().Body)
    if err != nil {
        return c.String(http.StatusInternalServerError, "Can't read body. Метод: roles/ReturnAddRole")
    }
    RoleName := &Role{}
    err = json.Unmarshal(bdy, &RoleName)
    if err != nil {
        return c.String(http.StatusInternalServerError, "Can't unmarshal JSON. Метод: roles/ReturnAddRole")
    }
...
И вот как мне получить то самое заветное "Всем привет" и передать его в качестве параметра в другую функцию? И ошибок никаких нет и понять не могу как это всё прочитать. Застрял.

Добавлено через 9 минут
Тем более дальше придётся передавать много элементов в массиве
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.09.2021, 11:34
Ответы с готовыми решениями:

Как во view получить данные из контроллера в формате Json или javascript-массива?
Здравствуйте! Есть view в которой у меня есть раздел <script></script> . Там я создаю таблицу (grid) при помощи фреймворка Ext Js. Но не...

Получить данные в формате json
есть две таблицы,пытаюсь получить из них данные в формате json таблица logs c колонками id,time,date таблица people c колонками id,name...

Получить данные в формате json из txt файла
Не могу разобраться с проблемой. у меня есть ссылка на текстовый файл ...

9
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,780
29.09.2021, 11:54
drvolodko, https://transform.tools/json-to-go
Миниатюры
Получить данные из массива в формате JSON  
1
 Аватар для drvolodko
224 / 68 / 33
Регистрация: 23.05.2014
Сообщений: 752
29.09.2021, 12:23  [ТС]
Спасибо, korvin_. Но это не шибко помогло, хотя и увидел свой косяк
сделал сейчас вот так:
Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
func (mdb *MyDatabase) ReturnAddRole(c echo.Context) (err error) {
    var rName Role
 
    c.Request().Header.Set("Content-Type", "application/json; charset=UTF-8")
 
    bdy, err := ioutil.ReadAll(c.Request().Body)
    if err != nil {
        return c.String(http.StatusInternalServerError, "Can't read body. Метод: roles/ReturnAddRole")
    }
    err = json.Unmarshal(bdy, &rName)
    if err != nil {
        return c.String(http.StatusInternalServerError, "Can't unmarshal JSON. Метод: roles/ReturnAddRole")
    }
    fmt.Println(rName.Rolename)//выводит зараза данные в консоль
    defer c.Request().Body.Close()
                                    //а сюда передаётся пустое значение
    if err = AddRole(mdb, rName.Rolename); err != nil {
        return c.String(http.StatusInternalServerError, "Can't add Role. Метод: roles/AddRole ")
    }
Но данные в функцию не передаются
0
 Аватар для drvolodko
224 / 68 / 33
Регистрация: 23.05.2014
Сообщений: 752
29.09.2021, 20:20  [ТС]
данные я получил и смог их передать. Но тут возникли 2 проблемы:
1. строка передаётся в таком виде: [{Всем привет}]
Можно как-то избавиться от этих скобок? Или только дополнительно обрабатывать стринг? В книге видел способ обрезки стринга (под рукой нет её), но может есть другое решение?
2. Русский текст весь примерно вот так ????????.
На решение я как то вроде нарывался в интернетах, но может у кого есть решение под рукой?
0
 Аватар для drvolodko
224 / 68 / 33
Регистрация: 23.05.2014
Сообщений: 752
30.09.2021, 09:14  [ТС]
Ну допустим первую проблему решил так:
Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Role struct {
    Rname []struct {
        Rolename string `json:"rolename"`
    } `json:"role"`
}
 
func (mdb *MyDatabase) ReturnAddRole(c echo.Context) (err error) {
    var (
        rName Role
        i     int
    )
 
    c.Request().Header.Set("Content-Type", "application/json; charset=UTF-8")
 
    bdy, err := ioutil.ReadAll(c.Request().Body)
    if err != nil {
        return c.String(http.StatusInternalServerError, "Can't read body. Метод: roles/ReturnAddRole")
    }
    defer c.Request().Body.Close()
    log.Println(string(bdy))
    err = json.Unmarshal(bdy, &rName)
    if err != nil {
        return c.String(http.StatusInternalServerError, "Can't unmarshal JSON. Метод: roles/ReturnAddRole")
    }
    s := fmt.Sprint(rName.Rname)
    i = len(s) - 2
    str := fmt.Sprint(string(s[2:i]))
    if err = AddRole(mdb, str); err != nil {
        return c.String(http.StatusInternalServerError, "Can't add Role. Метод: roles/ReturnAddRole")
    }
    return c.String(http.StatusOK, "")
}
Добавлено через 17 минут
Хотя не уверен, что всё сделал правильно...
0
507 / 160 / 49
Регистрация: 27.02.2016
Сообщений: 831
01.10.2021, 02:03
попробоваль ваш пример (заменил на буферио )

Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package main
 
import (
    "bufio"
    "fmt"
    "encoding/json"
    "strings"
    "os"
)
// autogenerated via [url]https://transform.tools/json-to-go[/url]
type Data struct {
        Hi []struct {
                Hello string `json:"hello"`
        } `json:"hi"`
}
 
// [url]https://stackoverflow.com/questions/5884154/read-text-file-into-string-array-and-write[/url]
 
func readLines(path string) ([]string, error) {
 
    file, err := os.Open(path)
    if err != nil {
        return nil, err
    }
    defer file.Close()
 
    var lines []string
    scanner := bufio.NewScanner(file)
    for scanner.Scan() {
        lines = append(lines, scanner.Text())
    }
    return lines, scanner.Err()
}
 
 
func main() {
  var (
    obj Data
  )
  lines, err := readLines("test.json")
  if err != nil { panic("read lines: " + err.Error()) }
  data := strings.Join(lines,"")
  fmt.Println(data)
  err = json.Unmarshal([]byte(data), &obj)
  if err != nil { panic("json deserialize: " + err.Error()) }
  s := fmt.Sprint(obj.Hi[0].Hello)
  fmt.Println(s)
}


Go
1
2
3
 go run example4.go
{    "hi": [{        "hello": "Всем привет"    }]}
Всем привет

то есть поля в объекте как в json

Go
1
obj.Hi[0].Hello
0
 Аватар для drvolodko
224 / 68 / 33
Регистрация: 23.05.2014
Сообщений: 752
01.10.2021, 09:22  [ТС]
skouzmine, честно говоря, совсем не понял, как это можно прикрутить к моему примеру и чем это может мне помочь..
0
507 / 160 / 49
Регистрация: 27.02.2016
Сообщений: 831
01.10.2021, 16:24
Лучший ответ Сообщение было отмечено drvolodko как решение

Решение

для вашего JSON
Code
1
{    "hi": [{        "hello": "Всем привет"    }]}
надо
после де-сериализации
вместо

Code
1
  s := fmt.Sprint(rName.Rname)

получить текст элемента через
Code
1
s := fmt.Sprint(rName.Rname[0].Rolename)
что я и сделал в своем примере
1
 Аватар для drvolodko
224 / 68 / 33
Регистрация: 23.05.2014
Сообщений: 752
03.10.2021, 10:54  [ТС]
skouzmine, понял. Спасибо. Завтра попробую прикрутить к своему примеру.
0
 Аватар для drvolodko
224 / 68 / 33
Регистрация: 23.05.2014
Сообщений: 752
04.10.2021, 08:31  [ТС]
skouzmine, спасибо. Прикрутил к своему примеру. Всё получилось.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.10.2021, 08:31
Помогаю со студенческими работами здесь

Newtonsoft.JSON как получить данные из массива?
В общем, есть классы: public class lineResults { public string line { get; set; } } ...

Получить ответ в формате Json
Не могу разобраться как получить ответ с api на c#. Помогите получить данные с запроса ...

Вывести данные в массиве json формате
Собственно подскажите как сделать, есть код: private function GameObject () { $query_text = "SELECT * FROM `gameobject`...

Как сохранить данные в формате json?
Здравствуйте всем. Есть необходимость при получении данных из формы(отзывы читателей), сохранять их в формате json, а потом вывести на...

Как записать данные в формате json
Как записать данные в формате json в python объект для работы с ними без использования библиотеки json?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru