Я просмотрел википедию, погуглил и прочитал официальную документацию, но я все еще не дошел до того момента, когда я действительно понял, что такое JSON и почему я бы его использовал.
Некоторое время я создавал приложения с использованием PHP, MySQL и Javascript / HTML, и если JSON может что-то сделать, чтобы облегчить мою жизнь, или мой код, или мой пользовательский интерфейс, то я хотел бы знать об этом. Может кто-нибудь дать мне лаконичное объяснение?
Также читайте об I-JSON: tbray.org/ongoing/When/201x/2015/03/23/i-json
+ Брэд Гилберт: Не совсем - это собственный способ выражения данных, он похож на JSON только потому, что они оба выражают объекты в виде строк (аналогично XML, plists или многим другим), но JSON лучше для машинного написания, а YAML для человеческого письма. .

JSON (JavaScript Object Notation) - это облегченный формат, который используется для обмена данными. Он основан на подмножестве языка JavaScript (способ построения объектов в JavaScript). Как и заявлено в MDN, часть JavaScript не является JSON, а часть JSON не является JavaScript.
Примером того, где это используется, являются ответы веб-служб. Раньше веб-сервисы использовали XML в качестве основного формата данных для обратной передачи данных, но с тех пор, как появился JSON (Формат JSON указан в RFC 4627 Дугласом Крокфордом.), он стал предпочтительным форматом, потому что он намного больше легкий
Вы можете найти больше информации на официальном сайте Веб-сайт JSON.
JSON состоит из двух структур:
Вот пример данных JSON:
{
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": 10021
},
"phoneNumbers": [
"212 555-1234",
"646 555-4567"
]
}
JSON (в Javascript) - это строка!
Люди часто предполагают, что все объекты Javascript - это JSON, а JSON - это объект Javascript. Это неверно.
В Javascript var x = {x:y} - это не JSON, это Объект Javascript. Это не одно и то же. Эквивалент JSON (представленный на языке Javascript) будет var x = '{"x":"y"}'. x - это объект типа нить, а не самостоятельный объект. Чтобы превратить это в полноценный объект Javascript, вы должны сначала его проанализировать, var x = JSON.parse('{"x":"y"}');, x теперь является объектом, но это больше не JSON.
См. Объект Javascript против JSON
При работе с JSON и JavaScript у вас может возникнуть соблазн использовать функцию eval для оценки результата, возвращаемого в обратном вызове, но это не рекомендуется, поскольку есть два символа (U + 2028 и U + 2029), действительные в JSON, но не в JavaScript (подробнее об этом здесь).
Следовательно, всегда нужно пытаться использовать скрипт Крокфорда, который проверяет действительный JSON перед его оценкой. Ссылка на объяснение скрипта находится здесь, а здесь - Прямая ссылка к файлу js. В настоящее время в каждом крупном браузере для этого есть собственная реализация.
Пример использования парсера JSON (с json из приведенного выше фрагмента кода):
//The callback function that will be executed once data is received from the server
var callback = function (result) {
var johnny = JSON.parse(result);
//Now, the variable 'johnny' is an object that contains all of the properties
//from the above code snippet (the json example)
alert(johnny.firstName + ' ' + johnny.lastName); //Will alert 'John Smith'
};
Парсер JSON также предлагает еще один очень полезный метод - stringify. Этот метод принимает объект JavaScript в качестве параметра и возвращает строку в формате JSON. Это полезно, когда вы хотите отправить данные обратно на сервер:
var anObject = {name: "Andreas", surname : "Grech", age : 20};
var jsonFormat = JSON.stringify(anObject);
//The above method will output this: {"name":"Andreas","surname":"Grech","age":20}
Два вышеуказанных метода (parse и stringify) также принимают второй параметр, который представляет собой функцию, которая будет вызываться для каждого ключа и значения на каждом уровне конечного результата, и каждое значение будет заменено результатом введенной вами функции. (Подробнее об этом здесь)
Кстати, для всех вас, кто думает, что JSON предназначен только для JavaScript, ознакомьтесь с эта почта, который объясняет и подтверждает обратное.
Независимо от способа сериализации информации, у вас будет синтаксический анализатор, верно? Следовательно, кого волнует, какой формат вы используете для передачи данных, если детали его реализации будут абстрагироваться.
На самом деле, если вы передаете данные клиенту и серверу и обратно, я думаю, что очень важно быть осторожным с размерами своего ответа.
Для педантичного есть пара символов, которые JSON обрабатывает иначе, чем JavaScript, что не позволяет ему быть строгим подмножеством: timelessrepo.com/json-isnt-a-javascript-subset
Когда вы говорите, что он более легкий, чем XML, вы имеете в виду размер файла или облегчение имеет пространственное значение в кодировании?
@whatahitson Его также проще анализировать, особенно если учесть такие вещи, как XML-схема и пространства имен.
Так вы бы заменили XML на JSON? Это то, что ты говоришь? Если так ... Отлично, xml - это кошмар.
Ссылка на мертвый ресурс: web.archive.org/web/20110622075541/http://timelessrepo.com/…
@kevin Как ни странно, похоже, что это было импортировано в новую платформу блогов авторов, Tumblr, но в части спецификации ссылок на tumblr говорится, что любая ссылка на сообщение с /json в конце возвращается в ... JSON: blog.simonwillison.net/post/57956827876/json
JSON - это нотация объектов JavaScript. Это гораздо более компактный способ передачи наборов данных по сетевым соединениям по сравнению с XML. Я предлагаю использовать JSON в любых AJAX-подобных приложениях, где XML был бы «рекомендуемым» вариантом. Многословие XML увеличит время загрузки и увеличит потребление полосы пропускания ($$$). Вы можете добиться того же эффекта с помощью JSON, и его разметка почти полностью посвящена самим данным, а не базовой структуре.
общий короткий ответ: если вы используете AJAX для запросов данных, вы можете легко отправлять и возвращать объекты в виде строк JSON. Доступные расширения для поддержки Javascript toJSON () вызывает все типы javascript для отправки данных на сервер в запросе AJAX. Ответы AJAX могут возвращать объекты в виде строк JSON, которые можно преобразовать в объекты Javascript простым вызовом eval, например. если функция AJAX someAjaxFunctionCallReturningJson вернула
"{ \"FirstName\" : \"Fred\", \"LastName\" : \"Flintstone\" }"
вы могли бы написать на Javascript
var obj = eval("(" + someAjaxFunctionCallReturningJson().value + ")");
alert(obj.FirstName);
alert(obj.LastName);
JSON также можно использовать для полезных нагрузок веб-сервисов и др., Но это действительно удобно для результатов AJAX.
С eval () все будет оценено. это угроза безопасности.
@ThomasWeller да, это древний ответ, теперь я бы пошел с JSON.parse, спасибо!
Нам нужно сделать проект в колледже, и мы столкнулись с очень большой проблемой, это называется «Политика одинакового происхождения». Помимо прочего, он делает так, что ваш метод XMLHttpRequest из Javascript не может делать запросы к доменам, отличным от домена, на котором находится ваш сайт.
Например, вы не можете сделать запрос на www.otherexample.com, если ваш сайт находится на www.example.com. JSONRequest позволяет это, но вы получите результат в формате JSON, если этот сайт позволяет это (например, у него есть веб-служба, которая возвращает сообщения в JSON). Это одна из проблем, когда вы могли бы использовать JSON.
Вот что-нибудь практичное: Yahoo JSON
Короче говоря, JSON - это способ сериализации таким образом, что он становится кодом JavaScript. При выполнении (с eval или иначе) этот код создает и возвращает объект JavaScript, содержащий сериализованные вами данные. Это доступно, потому что JavaScript допускает следующий синтаксис:
var MyArray = [ 1, 2, 3, 4]; // MyArray is now an array with 4 elements
var MyObject = {
'StringProperty' : 'Value',
'IntProperty' : 12,
'ArrayProperty' : [ 1, 2, 3],
'ObjectProperty' : { 'SubObjectProperty': 'SomeValue' }
}; // MyObject is now an object with property values set.
Вы можете использовать это для нескольких целей. Во-первых, это удобный способ передачи данных с серверной части в код JavaScript. Таким образом, это часто используется в AJAX.
Вы также можете использовать его как автономный механизм сериализации, который проще и занимает меньше места, чем XML. Существует множество библиотек, которые позволяют сериализовать и десериализовать объекты в JSON для различных языков программирования.
Короче говоря, это обозначение сценария для передачи данных. В некотором смысле альтернатива XML, изначально поддерживающая базовые типы данных, массивы и ассоциативные массивы (пары имя-значение, называемые объектами, потому что это то, что они представляют).
Синтаксис такой же, как и в JavaScript, а сам JSON означает «нотацию объектов JavaScript». Однако он стал портативным и используется также на других языках.
Полезная ссылка для подробностей находится здесь:
Мне нравится JSON в основном потому, что он такой лаконичный. Для веб-контента, который можно сжать с помощью gzip, это не обязательно имеет большое значение (поэтому Иксhtml так популярен). Но бывают случаи, когда это может быть полезно.
Например, для одного проекта я передавал информацию, которую нужно было сериализовать и передать через XMPP. Поскольку большинство серверов ограничивают объем данных, которые вы можете передать в одном сообщении, я счел полезным использовать JSON вместо очевидной альтернативы XML.
В качестве дополнительного бонуса, если вы знакомы с Python или Javascript, вы уже в значительной степени знаете JSON и можете интерпретировать его без особого обучения.
Все очень просто. JSON расшифровывается как Java Script Object Notation. Думайте об этом как об альтернативе использованию XML для передачи данных между программными компонентами.
Например, я недавно написал несколько веб-сервисов, которые возвращали JSON, и некоторые разработчики Javascript затем написали код, который вызывал сервисы и использовал информацию, возвращенную в этом формате.
Формат JSON часто используется для сериализации и передачи структурированных данных через сетевое соединение. Он используется в основном для передачи данных между сервером и веб-приложением, выступая в качестве альтернативы XML.
Разница между JSON и обычным синтаксисом будет следующим (в Javascript)
Общепринятый
function Employee(name, Id, Phone, email){
this.name = name;
this.Id = Id;
this.Phone = Phone;
this.email = email;
}
//access or call it as
var Emp = new Employee("mike","123","9373849784","[email protected]");
С JSON
если мы используем JSON, мы можем определить по-другому как
function Employee(args){
this.name = args.name;
this.Id = args.Id;
this.Phone = args.Phone;
this.email = args.email;
}
//now access this as...
var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'[email protected]'});
Важно помнить, что если нам нужно создать класс «Сотрудник» или модальное окно со 100 элементами без метода JSON, мы должны проанализировать все при создании класса. Но с JSON мы можем определять объекты встроенными только тогда, когда определен новый объект для класса.
так что эта строка ниже - это способ делать что-то с JSON (просто простой способ определения вещей)
var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'[email protected]'});
Это не совсем JSON - это объект Javascript (не JSON)
Что такое JSON?
Нотация объектов JavaScript (JSON) - это облегченный формат обмена данными, созданный на основе объектных литералов JavaScript.
Значения JSON могут состоять из:
объекты (коллекции пар имя-значение) массивы (упорядоченные списки значений) строки (в двойных кавычках) числа истина, ложь или ноль
JSON не зависит от языка.
JSON с PHP?
После версии PHP 5.2.0 расширение JSON по умолчанию декодирует и кодирует функции.
Json_encode - возвращает JSON-представление значений Json_decode - декодирует строку JSON Json_last_error - возвращает последнюю произошедшую ошибку.
Синтаксис и правила JSON?
Синтаксис JSON является производным от синтаксиса обозначения объекта JavaScript:
Данные представлены парами имя / значение Данные разделены запятыми Фигурные скобки удерживают предметы Квадратные скобки содержат массивы
JSON (объектная нотация Javascript) - это облегченный формат данных для обмена / передачи данных. Его пара ключ-значение, как и в JavaScript. Для REST API он широко используется для передачи данных от сервера к клиенту. В настоящее время многие сайты социальных сетей используют это. Хотя я не считаю это таким надежным, как XML, в отношении типов данных. XML имеет очень богатые типы данных и XSD. JSON в этом немного не хватает.
Для того же количества строковых данных JSON будет легче по сравнению с XML, поскольку XML имеет все эти открывающие и закрывающие теги и т. д.
Что такое JSON? - Как я объяснил жене TM
Мне: «По сути, это способ общения с кем-то в письменной форме ... но с очень конкретными правилами.
Жена: ага ....?
Мне: На прозаическом английском правила довольно расплывчаты: прямо как в боях в клетке. Не так с JSON. Есть много способов описать что-либо:
• Пример 1. В нашей семье 4 человека: ты, я и двое детей.
• Пример 2: Наша семья: ты, я, kid1 и kid2.
• Пример 3: Семья: [вы, я, kid1, kid2]
• Пример 4: у нас в семье 4 человека: мама, папа, kid1 и kid2.
Жена: Почему бы им просто не использовать простой английский?
Мне: Могут, но помните, что мы имеем дело с компьютерами. Компьютер глуп и не сможет понимать предложения. Поэтому мы должны быть очень конкретными, когда задействованы компьютеры, иначе они запутаются. Кроме того, JSON - довольно эффективный способ общения, поэтому большая часть не относящегося к делу материала вырезана, что довольно удобно. Если вы хотите передать информацию о нашей семье на компьютер, вы можете сделать это следующим образом:
{
"Family": ["Me", "Wife", "Kid1", "Kid2"]
}
…… и это в основном JSON. Но помните, вы ДОЛЖНЫ подчиняться правилам грамматики JSON. Если вы нарушите эти правила, компьютер просто не поймет (то есть проанализирует) то, что вы пишете.
Жена: Итак, как мне писать на Json?
Хорошим способом было бы использовать сериализатор json - библиотеку, которая делает за вас всю тяжелую работу.
Резюме
JSON is basically a way of communicating data to someone, with very, very specific rules. Using Key Value Pairs and Arrays. This is the concept explained, at this point it is worth reading the specific rules above.
Попробуйте следующий код для анализа вашего ответа php json: read.php
<script
src = "https://code.jquery.com/jquery-3.2.1.min.js"
integrity = "sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4 = "
crossorigin = "anonymous"></script>
<script type = "text/javascript">
$.ajax({
url:'index.php',
data:{},
type:"POST",
success:function(result) {
jsondecoded = $.parseJSON(result);
$.each(jsondecoded, function(index, value) {
$("#servers").text($("#servers").text() + " " + value.servername);
console.info(value.start);
console.info(value.end);
console.info(value.id);
});
},
statusCode: {
404: function() {
alert( "page not found" );
}
}
});
</script>
server.php
<?php
echo '[{"start":"2017-08-29","end":"2017-09-01","id":"22"},{"start":"2017-09-03","end":"2017-09-06","id":"23"}]';
?>
Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, как и / или почему он решает проблему, улучшит долгосрочную ценность ответа.
Иногда технические детали даются там, где они не требуются, и хотя многие из получивших наибольшее количество голосов ответы являются точными и конкретными, я лично не думаю, что они более легки для понимания или кратки, чем то, что можно найти в Википедии или в официальная документация.
Мне нравится думать о JSON именно так, как о языке в мире разных языков. Однако разница между JSON и другими языками заключается в том, что «все» «говорят» на JSON вместе со своим «родным языком».
На примере из реального мира давайте представим, что у нас есть три человека. Один человек говорит на игбо как на родном языке. Второй человек хотел бы взаимодействовать с первым человеком, однако первый человек говорит на йоруба как на своем родном языке.
Что мы можем сделать?
К счастью, третий человек в нашем примере вырос, говорящий по-английски, но также говорит на оба игбо и йоруба в качестве второго языка, и поэтому может действовать как посредник между первыми двумя людьми.
В мире программирования первое «лицо» - это Python, второе «лицо» - это Ruby, а третье «лицо» - это JSON, который, как оказалось, может «переводить» Ruby на Python и наоборот! Очевидно, что эта аналогия не идеальна, но как человек, владеющий двумя языками, я считаю, что это простой способ посмотреть, как JSON взаимодействует с другими языками программирования.
В контексте Java одна из причин, по которой может потребоваться использование JSON, заключается в том, что он представляет собой очень хорошую альтернативу структуре сериализации Java, которая, как было показано (исторически), подвержена довольно серьезным уязвимостям.
Джошуа Блох подробно обсуждает это в правиле 85 «Предпочитайте альтернативы сериализации Java» (эффективное третье издание Java).
Сериализация Java изначально предназначалась для перевода структур данных в формат, который можно было бы легко передавать или хранить. JSON соответствует этому требованию без серьезных уязвимостей, упомянутых выше.
Понимание JSON
JSON - это просто текстовый формат, который большинство REST API используют для возврата своих данных. Другой распространенный формат - XML, но XML гораздо более подробный.
Вот небольшой пример JSON:
// JSON object
{
"name": "John",
"age": 20
}
// JSON array
[
{
"name": "John",
"age": 20
},
{
"name": "Peter",
"age": 22
}
]
Обратите внимание, что фрагмент начинается с фигурной скобки {, которая указывает на объект. JSON также может начинаться как массив, в котором символ [ с квадратной скобкой обозначает начало массива. JSON должен быть правильно отформатирован, поэтому все начальные символы { и [ должны иметь свои конечные символы: } и ].
JSON может содержать объект или массив. Объект в JSON заключен в фигурные скобки { … }, а массив заключен в квадратные скобки [ … ].
JSON структурирует данные по ключ-значение. Ключ всегда строка, но значение может быть любым (строка, число, объект JSON, массив JSON…). Это повлияет на способ синтаксического анализа JSON на следующих этапах.
JSON - это подмножество YAML yaml.org