Преобразовать объект JS в строку JSON


1246

Если бы я определил объект в JS с помощью:

var j={"name":"binchen"};

Как я могу преобразовать объект в JSON? Выходная строка должна быть:

'{"name":"binchen"}'

63
JSON.stringify()это метод, который вы ищете.
Гаутам Гопалакришнан

11
Всегда есть первый раз, когда ты должен изучить это.
Egan Wolf

Ответы:


1923

Все текущие браузеры имеют встроенную поддержку JSON. Поэтому, если вы не имеете дело с доисторическими браузерами, такими как IE6 / 7, вы можете сделать это так же легко, как это:

var j = {
  "name": "binchen"
};
console.log(JSON.stringify(j));


5
скачайте этот скрипт для JSON.stringify(j);работы
AabinGunz

2
Работа над nodejs, потому что для узла используется один и тот же движок
georgelviv

26
Этот ответ был опубликован за год до выхода IE9, поэтому на момент написания IE8 был действительно современным браузером или, по крайней мере, новейшим IE.
Андрис

JSON.stringify не конвертирует вложенные объекты. Любое решение для этого .. ??
Ритеш

9
Если вам нужна более читаемая строка json, вы можете использовать параметр пробела, какvar formattedJSON = JSON.stringify(j, null, 2);
Jacek Gzel

110

С JSON.stringify()найдены в json2.js или родной в большинстве современных браузеров.

   JSON.stringify(value, replacer, space)
        value       any JavaScript value, usually an object or array.

       replacer    an optional parameter that determines how object
                    values are stringified for objects. It can be a
                    function or an array of strings.

       space       an optional parameter that specifies the indentation
                    of nested structures. If it is omitted, the text will
                    be packed without extra whitespace. If it is a number,
                    it will specify the number of spaces to indent at each
                    level. If it is a string (such as '\t' or ' '),
                    it contains the characters used to indent at each level.

       This method produces a JSON text from a JavaScript value.

6
Для немного больше ясности: replacer это необязательно, так что если вы хотите по- прежнему использовать spaceARG вы положили nullна replacer. Если вы заинтересованы в использовании этой функции для красивой печати, я нашел этот ответ также полезным: stackoverflow.com/a/7220510/857209
Гленн Лоуренс

34

Проверьте обновленный / лучший способ Томаса Франка:

Обновление 17 мая 2008: добавлено небольшое дезинфицирующее средство в метод toObject. Теперь toObject () не будет проверять строку (), если обнаружит в ней какой-либо вредоносный код. Для еще большей безопасности: не устанавливайте для флага includeFunctions значение true.

Дуглас Крокфорд, отец концепции JSON, написал один из первых строковых преобразователей для JavaScript. Позже Стив Йен из Trim Path написал хорошую улучшенную версию, которую я использовал в течение некоторого времени. Это мои изменения в версии Стива, которыми я хотел бы поделиться с вами. В основном они проистекают из моего желания сделать стрингер:

  • обрабатывать и восстанавливать циклические ссылки
  • включить код JavaScript для функций / методов (в качестве опции)
  • исключить члены объекта из Object.prototype, если это необходимо.

24

Вы можете использовать метод JSON.stringify () для преобразования объекта JSON в строку.

var j={"name":"binchen"};
JSON.stringify(j)

Для обратного процесса вы можете использовать метод JSON.parse () для преобразования строки JSON в объект JSON.


Спасибо за добавление обратного процесса.
Дэвид Лавьери

12

JSON.stringify(j, null, 4) даст вам украшенный JSON в случае, если вам нужно украшение также

Второй параметр - заменитель. Его можно использовать в качестве фильтра, где вы можете отфильтровать определенные значения ключа при строковом преобразовании. Если установлено значение null, он вернет все пары ключ-значение


11

В угловых

angular.toJson(obj, pretty);

obj: ввод для сериализации в JSON.

pretty (необязательно):
если установлено значение true, вывод JSON будет содержать символы новой строки и пробелы. Если задано целое число, вывод JSON будет содержать столько пробелов на отступ.

(по умолчанию: 2)



9

JSON.stringify превращает объект Javascript в текст JSON и сохраняет этот текст JSON в строке.

Преобразование объекта в строку

JSON.parse превращает строку текста JSON в объект Javascript.

Преобразование Строка в Объект

var j={"name":"binchen"};

чтобы сделать это JSON String можно использовать следующее.

JSON.stringify({"key":"value"});

JSON.stringify({"name":"binchen"});

Для получения дополнительной информации вы можете обратиться по этой ссылке ниже.

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify


7

Один пользовательский, определенный для этого, пока мы не сделаем странный метод от stringify

var j={"name":"binchen","class":"awesome"};
var dq='"';
var json="{";
var last=Object.keys(j).length;
var count=0;
for(x in j)
{
json += dq+x+dq+":"+dq+j[x]+dq;
count++;
if(count<last)
   json +=",";
}
json+="}";
document.write(json);

ВЫВОД

{"name":"binchen","class":"awesome"}

LIVE http://jsfiddle.net/mailmerohit5/y78zum6v/


не экранирует строки с кавычками, например: «a \» в строке »
alphakevin

1
Этот пользовательский код очень неполный. Не поддерживает массивы, объекты и специальные символы. Пример: json {"arr": ["1", "2", "3"], "obj": {"a": "b"}, "ключ \" с \\ special} символами ":" значение "} выведет {" arr ":" 1,2,3 "," obj ":" [объект объекта] "," ключ "с \ специальными символами}:" значение "}, что неверно!
Мануэль Ромейро

7

У меня были проблемы с нехваткой памяти stringify, и другие решения, похоже, не работали (по крайней мере, я не мог заставить их работать), когда я наткнулся на этот поток. Благодаря Rohit Kumar я просто перебираю свой очень большой JSON-объект, чтобы предотвратить его падение

var j = MyObject;
var myObjectStringify = "{\"MyObject\":[";
var last = j.length
var count = 0;
for (x in j) {
    MyObjectStringify += JSON.stringify(j[x]);
    count++;
    if (count < last)
        MyObjectStringify += ",";
}
MyObjectStringify += "]}";

MyObjectStringify выдаст вам строковое представление (как уже упоминалось в этом потоке), за исключением случаев, когда у вас большой объект, это также должно работать - просто убедитесь, что вы собрали его в соответствии со своими потребностями - мне нужно, чтобы оно имело имя, а не массив


5

Woking ... Простота в использовании

$("form").submit(function(evt){
  evt.preventDefault();
  var formData = $("form").serializeArray(); // Create array of object
  var jsonConvert = JSON.stringify(formData);  // Convert to json
});

Спасибо



3

если вы хотите получить значение свойств json в строковом формате, используйте следующий способ

var i = {"x":1}

var j = JSON.stringify(i.x);

var k = JSON.stringify(i);

console.log(j);

"1"

console.log(k);

'{"x":1}'

3

Для отладки в Node JS вы можете использовать util.inspect () . Лучше работает с циклическими ссылками.

var util = require('util');
var j = {name: "binchen"};
console.log(util.inspect(j));

3

Существующий JSON заменяет меня слишком много, поэтому я написал свою собственную функцию. Кажется, это работает, но я мог пропустить несколько крайних случаев (которые не встречаются в моем проекте). И, вероятно, не будет работать для каких-либо ранее существующих объектов, только для самодельных данных.

function simpleJSONstringify(obj) {
    var prop, str, val,
        isArray = obj instanceof Array;

    if (typeof obj !== "object") return false;

    str = isArray ? "[" : "{";

    function quote(str) {
        if (typeof str !== "string") str = str.toString();
        return str.match(/^\".*\"$/) ? str : '"' + str.replace(/"/g, '\\"') + '"'
    }

    for (prop in obj) {
        if (!isArray) {
            // quote property
            str += quote(prop) + ": ";
        }

        // quote value
        val = obj[prop];
        str += typeof val === "object" ? simpleJSONstringify(val) : quote(val);
        str += ", ";
    }

    // Remove last colon, close bracket
    str = str.substr(0, str.length - 2)  + ( isArray ? "]" : "}" );

    return str;
}

2
So in order to convert a js object to JSON String: 

Простой синтаксис для преобразования объекта в строку

JSON.stringify(value)

Полный синтаксис: JSON.stringify (значение [, replacer [, пробел]])

Давайте посмотрим несколько простых примеров. Обратите внимание, что вся строка получает двойные кавычки и все данные в строке экранируются при необходимости.

JSON.stringify("foo bar"); // ""foo bar""
JSON.stringify(["foo", "bar"]); // "["foo","bar"]"
JSON.stringify({}); // '{}'
JSON.stringify({'foo':true, 'baz':false}); /* " 
{"foo":true,"baz":false}" */



const obj = { "property1":"value1", "property2":"value2"};
const JSON_response = JSON.stringify(obj);
console.log(JSON_response);/*"{ "property1":"value1", 
"property2":"value2"}"*/

2
Было бы здорово, если бы вы могли дать краткое объяснение вашего кода.
Джонни

Это не дает ответа на вопрос. Как только у вас будет достаточно репутации, вы сможете комментировать любой пост ; вместо этого предоставьте ответы, которые не требуют разъяснений от автора . - Из обзора
Рафаэль

Я отредактировал свой ответ, большое спасибо за указание на @Rafael и @ jonny.
Рахул Чоудхари

1

Просто используйте JSON.stringifyдля такого преобразования - однако помните, что поля, которые имеют undefinedзначение, не будут включены в json

var j={"name":"binchen", "remember":undefined, "age": null };

var s=JSON.stringify(j);

console.log(s);

Поле remember«исчезнет» с выхода json


Вы только что спасли мой день. Я не смог сохранить свой объект. ключ к тому, что поля с неопределенным значением не будут включены в json, решили мою проблему!
Мохаммад Гончезефиди

0

Вы можете использовать метод JSON.stringify () для преобразования объекта JSON в строку.

var j={"name":"hello world"};
JSON.stringify(j);

Чтобы преобразовать эту строку обратно в объект json, вы можете использовать метод JSON.parse ().


0

использование JSON.stringify(param1, param2, param3);

Что такое: -

param1 -> значение для преобразования в JSON

param2 -> функция для строкового преобразования по-своему. Кроме того, он служит белым списком, для которого объекты должны быть включены в окончательный JSON.

param3 -> Тип данных Number, который указывает количество пробелов для добавления. Максимально допустимое значение 10.


0

convert str => obj

const onePlusStr = '[{"brand": "oneplus"}, {"model": "7T"}]';

const onePLusObj = JSON.parse (onePlusStr);

конвертировать obj => str

const onePLusObjToStr = JSON.stringify (onePlusStr);

Ссылки на разбор JSON в JS:
JSON.parse (): щелкните
JSON.stringify (): щелкните


Можете ли вы предоставить больше информации? Рекомендации и т. Д.
Nodejs-nerd

Ссылки на JSON разбора в JS: JSON.parse (): w3schools.com/js/js_json_parse.asp JSON.stringify (): w3schools.com/js/js_json_stringify.asp
Яша

спасибо, можешь отредактировать свой ответ, чтобы включить это
Nodejs-nerd

0

Очень простой в использовании метод, но не используйте его в релизе (из-за возможных проблем совместимости).

Отлично подходит для тестирования на вашей стороне.

Object.prototype.toSource()

//Usage:
obj.toSource();

0

Используйте функцию stringify

var j = {
"name":"binchen"
};

var j_json = JSON.stringify(j);

console.log("j in json object format :", j_json);

Удачного кодирования !!!


0
//use JSON.stringify({})

const stringified = JSON.stringify ({}) // передать объект, который вы хотите преобразовать в строковый формат


-1

Использовать этот,

var j={"name":"binchen"};
 var myJSON = JSON.stringify(j);

-24

если у вас есть строка json и она не обернута в [], то сначала оберните ее

var str = '{"city": "Tampa", "state": "Florida"}, {"city": "Charlotte", "state": "North Carolina"}';
str = '[' + str + ']';
var jsonobj = $.parseJSON(str);

ИЛИ

var jsonobj = eval('(' + str + ')');
console.log(jsonobj);

ОП пытается пойти другим путем. Ваш вопрос отвечает на обратный случай, когда он имеет строку JSON и хочет получить ее как объект.
Джошуа Снайдер

1
вы сделали обратный ход вопроса: вам следует использовать функцию JSON.stringfy ()
Hardik Patel
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.