Skip to content

Instantly share code, notes, and snippets.

@ermakovpetr
Last active February 8, 2022 22:15
Show Gist options
  • Save ermakovpetr/4c9f56d48e49d822705a to your computer and use it in GitHub Desktop.
Save ermakovpetr/4c9f56d48e49d822705a to your computer and use it in GitHub Desktop.
Все, что вы хотели знать о JSON, но боялись спросить

JSON

Что такое JSON?

JSON - текстовое представление данных.

К примеру, вам необходимо передать объект (экземпляр класса) по сети или записать в файл класс, а потом его прочитать из этой же или другой программы. В таком случае вам необходимо воспользоваться сериализацией (см https://ru.wikipedia.org/wiki/Сериализация). В большинстве высокоуровневых языках программирования есть собственные средства сериализации, зачастую сериализация происходит в нечитаемый человеком набор байтов.

Ниже пойдет речь о текстовой сериализации, json и xml. Хочется заметить, что если мы говорим о классической сериализации объектов, то сериализуются только данные (поля класса), тогда как информация о методах не содержиться в сериализованных данных. Такое представление называется DTO (см. https://ru.wikipedia.org/wiki/DTO)

Но пример JSON.

К примеру у вас есть класс

class classA {
    public:
        int integerData = 3;
        string stringData = "StringValue";
        int foo [5] = { 16, 2, 77, 40, 12071 };
};

...

classA * objectA = new classA();

Тогда примерная сериализация в xml будет выглядеть так:

<objectA>
  <integerData>3</integerData>
  <stringData>StringValue</stringData>
  <foo>
    <value>16</value>
    <value>2</value>
    <value>77</value>
    <value>40</value>
    <value>12071</value>
  </foo>
</objectA>

А на json это будет выглядеть так:

{
	"integerData": 3,
	"stringData": "StringValue",
	"foo": [16, 2, 77, 40, 12071]
}

Не правда ли, читабельней? =) (субъективная оценка преподавателя)

(Хочется заметить, что данные примеры сериализации этого объекта в xml и json могут различаться от библиотек, ЯП и других факторов. Даже вы сами можете написать функцию (или метод) сериализации любого объекта)

Типы json

Вы уже заметили различные типы в записи json Допустимые типы в записе объекта json:

  • число
  • строка
  • литералы null, false, true
  • объект json (вложенное определение)
  • одномерный массив (объектов (число, строка, литерал, объект json))

Соответственно ниже приведены примеры этих типов;

{
  "number1": 134,
  "number2": -1,
  "string1": "blablabla",
  "string2": "",
  "literal1": true,
  "literal2": false,
  "literal3": true,
  "object": {
    "number1": 36,
    "number2": 0,
    "string1": "qweqwe",
  }
  "array1": [1,2,4,5],
  "array2": ["asd123", "32", "qwe"],
  "array3": [],
  "array4": [
    {"a": 2},
    {"b": 3}
  ]
}

Чем хорош JSON?

Он читабельней и экономней, чем xml. Многообразие библиотек для работы с json на сегодняшний день почти не уступает библиотекам для работы с xml. Для Java - org.json.JSONObject или GSON, для Python - стандартная библиотека json, для C# - Json.NET, DataContractJsonSerializer Есть и для других языков.

Пример работы из Java:

import org.json.*;


JSONObject obj = new JSONObject(" .... ");
String pageName = obj.getJSONObject("pageInfo").getString("pageName");

JSONArray arr = obj.getJSONArray("posts");
for (int i = 0; i < arr.length(); i++)
{
    String post_id = arr.getJSONObject(i).getString("post_id");
    ......
}

В Python json десерелизуется в dict (если использовать стандартную библиотеку json)

###Что почитать? http://ru.wikipedia.org/wiki/JSON

http://en.wikipedia.org/wiki/JSON

http://habrahabr.ru/post/230079/

http://habrahabr.ru/post/31225/

Надеюсь, мне удалось вам вкратце рассказать про json и вы начнете использовать его в вашей разработке.


Enjoy!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment