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

977

Как я могу преобразовать объект JavaScript в строку?

Пример:

var o = {a:1, b:2}
console.log(o)
console.log('Item: ' + o)

Вывод:

Object {a = 1, b = 2} // очень хороший читаемый вывод :)
Item: [object Object] // не знаю, что внутри :(

user680174
источник
7
Конвертировать в строку для какой цели? Вы имеете в виду сериализацию, чтобы вы могли построить объект позже из строки? Или просто для показа?
Shadow Wizard - это ухо для тебя
19
Автор ушел от лет, но, помня, после многих лет, я думаю, точкой входа для проблемы был console.log (obj), который отображает объект со свойствами, а console.log ('obj:' + obj ) дезориентирует иначе.
Дунайский моряк
2
просто нельзя применить добавить два объекта. Если бы мы могли это сделать, не было бы различий в типе значения и типе ссылки.
Нишант Кумар
12
var o = {a: 1, b: 2}; console.log ('Item:' + JSON.stringify (o))
Нишант Кумар
22
Если это для консоли, я бы порекомендовал сделать console.log("Item", obj);. Не нужно ничего сложного.
soktinpk

Ответы:

1334

Я бы порекомендовал использовать JSON.stringify, который преобразует набор переменных в объекте в строку JSON. Большинство современных браузеров изначально поддерживают этот метод, но для тех, которые этого не делают, вы можете включить версию JS :

var obj = {
  name: 'myObj'
};

JSON.stringify(obj);
Гари Чемберс
источник
7
Для справки IE6 и 7 не поддерживают это. IE6 не так уж и важен из-за очень небольшого количества пользователей и активной кампании по его уничтожению ... но все еще довольно много пользователей IE7 (зависит от вашей пользовательской базы).
MikeMurko
30
Я получаю «Uncaught TypeError: Преобразование круговой структуры в JSON». Даже если есть круговая ссылка, я все равно хотел бы увидеть строковое представление моего объекта. Что я могу сделать?
Паскаль Кляйн
26
Это не работает , если объект имеет функцию свойства, например: foo: function () {...}.
Брок Адамс
2
Ссылка на библиотеку JSON не работает, если щелкнуть по StackOverflow. Скопируйте и вставьте его в адресную строку.
f.ardelian
1
Вы можете использовать JSON.stringify(obj, null, 2);для более красивого вывода.
l.poellabauer
127

Используйте функцию String () javascript

 String(yourobject); //returns [object Object]

или stringify ()

JSON.stringify(yourobject)
Викрам Пот
источник
28
var foo = {bar: 1}; String (Foo); -> "[Объект Объект]"
Анти Вееранна
1
var foo = {bar: 1}; String (Foo [ 'бар']); -> «1»
Викрам Пот
3
Если вы хотите, чтобы весь объект представлял собой строку, используйте JSON.stringify (foo)
Vikram Pote
8
JSON.stringify(yourobject)горничная моего дня!
Нейротрансмиттер
1
@TranslucentCloud * сделано
Памппальный Пун
87

Конечно, чтобы преобразовать объект в строку, вы должны либо использовать свой собственный метод, такой как:

function objToString (obj) {
    var str = '';
    for (var p in obj) {
        if (obj.hasOwnProperty(p)) {
            str += p + '::' + obj[p] + '\n';
        }
    }
    return str;
}

На самом деле, вышесказанное просто показывает общий подход; вы можете использовать что-то вроде http://phpjs.org/functions/var_export:578 или http://phpjs.org/functions/var_dump:604

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

Бретт Замир
источник
78

Проще говоря console, вы можете просто использовать запятую вместо +. +Попытается преобразовать объект в строку, а запятая будет отображаться отдельно в консоли.

Пример:

var o = {a:1, b:2};
console.log(o);
console.log('Item: ' + o);
console.log('Item: ', o);   // :)

Вывод:

Object { a=1, b=2}           // useful
Item: [object Object]        // not useful
Item:  Object {a: 1, b: 2}   // Best of both worlds! :)

Ссылка: https://developer.mozilla.org/en-US/docs/Web/API/Console.log

Люк
источник
Великолепное решение! Но могли бы сказать , у меня , что происходит за кулисами , когда вы просто сделать это: console.log(o)? Поскольку, если вы попытаетесь зарегистрировать объект, добавленный в строку, он фактически вызывает toString()объект.
Gocy015
1
console.logв конечном итоге вызывает то, что называется Printerспецификацией: «Как реализация печатает аргументы, зависит от реализации» - это означает, что каждый браузер может делать это по- своему (см. console.spec.whatwg.org/#printer ). Firefox будет отображать объекты в виде строки, но красиво окрашены. Chrome отобразит объект в виде интерактивной группы, которую можно развернуть, чтобы увидеть свойства. Попробуйте!
Лука
2
Очень хороший трюк и, вероятно, хорошо для современных веб-браузеров, но он не на 100% надежен для всех реализаций JS. например, в Qt QML, который реализует механизм JS, вывод для console.log('Item: ', o);по-прежнему Item: [object Object].
Пол Масри-Стоун
Вместо этого console.logвы можете использовать console.dir(o)для печати объект javascript вместо того, чтобы печатать его в виде строки. В инструментах разработчика это позволяет открыть объект и проверить все свойства, даже массивы. (см .: developer.mozilla.org/de/docs/Web/API/Console/dir )
EagleT
37

РЕДАКТИРОВАТЬ Не используйте этот ответ, так как он не работает в Internet Explorer. Используйте раствор Гэри Чамберса .

toSource () - это функция, которую вы ищете, которая запишет ее как JSON.

var object = {};
object.first = "test";
object.second = "test2";
alert(object.toSource());
Gazler
источник
6
Хотя это удобно для отладки в Firefox, toSource()в IE не работает.
Бретт Замир
4
toSource()не является общепризнанным стандартом, поэтому нельзя гарантировать его поддержку во всех браузерах.
Гэри Чемберс
11
Ах, спасибо за указание на это. Я оставлю здесь свой ответ для тех, кто не знает об этом.
Газлер
Хотелось бы мне поблагодарить вас больше, поскольку это отличное решение для сред, в которых есть javascript (но консольный журнал неудобен / недоступен).
Зак Моррис
Вы можете предоставить полипропилен toSource: github.com/oliver-moran/toSource.js/blob/master/toSource.js
roland
32

Один вариант :

console.log('Item: ' + JSON.stringify(o));

o печатается в виде строки

Другой вариант (как указано в комментариях к soktinpk ) и лучше для отладки консоли IMO:

console.log('Item: ', o);

o печатается как объект, который вы могли бы развернуть, если бы у вас было больше полей

nabn
источник
22

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

Я сделал свое собственное решение, которое работает как минимум в Chrome. Размещая его здесь, вы сможете найти его в Google.

//Make an object a string that evaluates to an equivalent object
//  Note that eval() seems tricky and sometimes you have to do
//  something like eval("a = " + yourString), then use the value
//  of a.
//
//  Also this leaves extra commas after everything, but JavaScript
//  ignores them.
function convertToText(obj) {
    //create an array that will later be joined into a string.
    var string = [];

    //is object
    //    Both arrays and objects seem to return "object"
    //    when typeof(obj) is applied to them. So instead
    //    I am checking to see if they have the property
    //    join, which normal objects don't have but
    //    arrays do.
    if (typeof(obj) == "object" && (obj.join == undefined)) {
        string.push("{");
        for (prop in obj) {
            string.push(prop, ": ", convertToText(obj[prop]), ",");
        };
        string.push("}");

    //is array
    } else if (typeof(obj) == "object" && !(obj.join == undefined)) {
        string.push("[")
        for(prop in obj) {
            string.push(convertToText(obj[prop]), ",");
        }
        string.push("]")

    //is function
    } else if (typeof(obj) == "function") {
        string.push(obj.toString())

    //all other values can be done with JSON.stringify
    } else {
        string.push(JSON.stringify(obj))
    }

    return string.join("")
}

РЕДАКТИРОВАТЬ: Я знаю, что этот код может быть улучшен, но просто не удосужился сделать это. Пользователь andrey предложил улучшение здесь с комментарием:

Вот немного измененный код, который может обрабатывать 'null' и 'undefined', а также не добавлять лишние запятые.

Используйте это на свой страх и риск, так как я не проверял это вообще. Не стесняйтесь предлагать любые дополнительные улучшения в качестве комментария.

Houshalter
источник
Вам не хватает некоторых '}
dacopenhagen
2
Очень хороший код, но ,в конце каждого объекта / массива есть трейлинг .
NiCk Newman
это лучший ответ
Роман
20

Если вы просто выводите на консоль, вы можете использовать console.log('string:', obj). Обратите внимание на запятую .

Александр Р. Янини
источник
Это создает проблемы в сценариях, когда AJAX и deferred вступают в игру - вывод из console.logчасто отображается после того, как AJAX заканчивает параллельное снабжение массива данными, что приводит к неверным результатам. В таких случаях клонирование или сериализация объектов - это путь: поскольку мы регистрировали дублированный объект, даже когда AJAX заканчивает свою работу, он заполняет «старые» данные.
15-14
18

В тех случаях, когда вы знаете, что объект представляет собой просто логическое значение, дату, строку, число и т. Д. Функция javascript String () работает просто отлично. Недавно я нашел это полезным при работе со значениями из функции $ .each в jquery.

Например, следующий код преобразует все элементы в значении в строку:

$.each(this, function (name, value) {
  alert(String(value));
});

Подробнее здесь:

http://www.w3schools.com/jsref/jsref_string.asp

Джейк Дрю
источник
Илиvar my_string = ''+value+'';
Джон Магнолия
2
Работает для меня. Я предпочитаю это решение, потому что я бы не использовал плагин для такой простой задачи.
Тиллито
15
var obj={
name:'xyz',
Address:'123, Somestreet'
 }
var convertedString=JSON.stringify(obj) 
 console.log("literal object is",obj ,typeof obj);
 console.log("converted string :",convertedString);
 console.log(" convertedString type:",typeof convertedString);
солнечный рай
источник
12

Я искал это и написал глубоко рекурсивный с отступом:

function objToString(obj, ndeep) {
  if(obj == null){ return String(obj); }
  switch(typeof obj){
    case "string": return '"'+obj+'"';
    case "function": return obj.name || obj.toString();
    case "object":
      var indent = Array(ndeep||1).join('\t'), isArray = Array.isArray(obj);
      return '{['[+isArray] + Object.keys(obj).map(function(key){
           return '\n\t' + indent + key + ': ' + objToString(obj[key], (ndeep||1)+1);
         }).join(',') + '\n' + indent + '}]'[+isArray];
    default: return obj.toString();
  }
}

Применение : objToString({ a: 1, b: { c: "test" } })

SylvainPV
источник
обратите внимание, что если вы хотите предотвратить бесконечные циклы для объектов с круговыми ссылками, вы можете добавить if(ndeep > MAX_DEPTH_LEVEL){ return '...'; }в функцию, где MAX_DEPTH_LEVEL - это выбранное вами максимальное количество слоев объектов, которые нужно копать.
SylvainPV
11

Если вы просто хотите увидеть объект для отладки, вы можете использовать

var o = {a:1, b:2} 
console.dir(o)
PaulAndrewLang
источник
9

1.

JSON.stringify(o);

Item: {"a": "1", "b": "2"}

2.

var o = {a:1, b:2};
var b=[]; Object.keys(o).forEach(function(k){b.push(k+":"+o[k]);});
b="{"+b.join(', ')+"}";
console.log('Item: ' + b);

Предмет: {a: 1, b: 2}

vacsati
источник
1
Было бы лучше, если вы рассмотрите возможность добавления более подробной информации о вашем ответе.
Харун Дилука Хешан
8

Методы JSON значительно уступают примитиву движка Gecko .toSource ().

Смотрите ответ статьи SO для сравнительных тестов.

Кроме того, ответ выше относится к http://forums.devshed.com/javascript-development-115/tosource-with-arrays-in-ie-386109.html, который, как JSON, (который другая статья http: // www.davidpirek.com/blog/object-to-string-how-to-deserialize-json использует через "ExtJs JSON кодировать исходный код" ) не может обрабатывать циклические ссылки и является неполным. Приведенный ниже код показывает его (поддельные) ограничения (исправлено для обработки массивов и объектов без содержимого).

( прямая ссылка на код в //forums.devshed.com/ ... / tosource-with-arrays-in-ie-386109 )

javascript:
Object.prototype.spoof=function(){
    if (this instanceof String){
      return '(new String("'+this.replace(/"/g, '\\"')+'"))';
    }
    var str=(this instanceof Array)
        ? '['
        : (this instanceof Object)
            ? '{'
            : '(';
    for (var i in this){
      if (this[i] != Object.prototype.spoof) {
        if (this instanceof Array == false) {
          str+=(i.match(/\W/))
              ? '"'+i.replace('"', '\\"')+'":'
              : i+':';
        }
        if (typeof this[i] == 'string'){
          str+='"'+this[i].replace('"', '\\"');
        }
        else if (this[i] instanceof Date){
          str+='new Date("'+this[i].toGMTString()+'")';
        }
        else if (this[i] instanceof Array || this[i] instanceof Object){
          str+=this[i].spoof();
        }
        else {
          str+=this[i];
        }
        str+=', ';
      }
    };
    str=/* fix */(str.length>2?str.substring(0, str.length-2):str)/* -ed */+(
        (this instanceof Array)
        ? ']'
        : (this instanceof Object)
            ? '}'
            : ')'
    );
    return str;
  };
for(i in objRA=[
    [   'Simple Raw Object source code:',
        '[new Array, new Object, new Boolean, new Number, ' +
            'new String, new RegExp, new Function, new Date]'   ] ,

    [   'Literal Instances source code:',
        '[ [], {}, true, 1, "", /./, function(){}, new Date() ]'    ] ,

    [   'some predefined entities:',
        '[JSON, Math, null, Infinity, NaN, ' +
            'void(0), Function, Array, Object, undefined]'      ]
    ])
alert([
    '\n\n\ntesting:',objRA[i][0],objRA[i][1],
    '\n.toSource()',(obj=eval(objRA[i][1])).toSource(),
    '\ntoSource() spoof:',obj.spoof()
].join('\n'));

который отображает:

testing:
Simple Raw Object source code:
[new Array, new Object, new Boolean, new Number, new String,
          new RegExp, new Function, new Date]

.toSource()
[[], {}, (new Boolean(false)), (new Number(0)), (new String("")),
          /(?:)/, (function anonymous() {}), (new Date(1303248037722))]

toSource() spoof:
[[], {}, {}, {}, (new String("")),
          {}, {}, new Date("Tue, 19 Apr 2011 21:20:37 GMT")]

а также

testing:
Literal Instances source code:
[ [], {}, true, 1, "", /./, function(){}, new Date() ]

.toSource()
[[], {}, true, 1, "", /./, (function () {}), (new Date(1303248055778))]

toSource() spoof:
[[], {}, true, 1, ", {}, {}, new Date("Tue, 19 Apr 2011 21:20:55 GMT")]

а также

testing:
some predefined entities:
[JSON, Math, null, Infinity, NaN, void(0), Function, Array, Object, undefined]

.toSource()
[JSON, Math, null, Infinity, NaN, (void 0),
       function Function() {[native code]}, function Array() {[native code]},
              function Object() {[native code]}, (void 0)]

toSource() spoof:
[{}, {}, null, Infinity, NaN, undefined, {}, {}, {}, undefined]
Ekim
источник
8

На самом деле в существующих ответах отсутствует одна простая опция (для последних браузеров и Node.js):

console.log('Item: %o', o);

Я бы предпочел это, поскольку JSON.stringify()имеет определенные ограничения (например, с круговыми структурами).

Кристиан Гаврон
источник
7

Похоже, JSON принимает второй параметр, который может помочь с функциями - replacer , это решает проблему преобразования самым элегантным способом:

JSON.stringify(object, (key, val) => {
    if (typeof val === 'function') {
      return String(val);
    }
    return val;
  });
Глеб Долзиков
источник
5

Если вы заботитесь только о строках, объектах и ​​массивах:

function objectToString (obj) {
        var str = '';
        var i=0;
        for (var key in obj) {
            if (obj.hasOwnProperty(key)) {
                if(typeof obj[key] == 'object')
                {
                    if(obj[key] instanceof Array)
                    {
                        str+= key + ' : [ ';
                        for(var j=0;j<obj[key].length;j++)
                        {
                            if(typeof obj[key][j]=='object') {
                                str += '{' + objectToString(obj[key][j]) + (j > 0 ? ',' : '') + '}';
                            }
                            else
                            {
                                str += '\'' + obj[key][j] + '\'' + (j > 0 ? ',' : ''); //non objects would be represented as strings
                            }
                        }
                        str+= ']' + (i > 0 ? ',' : '')
                    }
                    else
                    {
                        str += key + ' : { ' + objectToString(obj[key]) + '} ' + (i > 0 ? ',' : '');
                    }
                }
                else {
                    str +=key + ':\'' + obj[key] + '\'' + (i > 0 ? ',' : '');
                }
                i++;
            }
        }
        return str;
    }
Анурааг Вайдья
источник
5

stringify-objectхорошая библиотека npm, созданная командой yeoman: https://www.npmjs.com/package/stringify-object

npm install stringify-object

тогда:

const stringifyObject = require('stringify-object');
stringifyObject(myCircularObject);

Очевидно, это интересно, только если у вас есть круговой объект, который потерпит неудачу с JSON.stringify();

Николас Зозол
источник
1
Зачем кому-то использовать модуль NPM для чего-то подобного, чего можно добиться с помощью одной строки в простом JS? Этот ответ требует подробностей о том, почему кто-то будет делать это.
Зельфир Кальцталь
Как часто, библиотека поможет в крайнем случае. Я использовал это, чтобы иметь дело с циркулярными ссылками.
Николас Зозол
1
Это имеет больше смысла с добавленной запиской о круглых объектах, убирающей мое понижение.
Зельфир Кальцталь
4

Взгляните на плагин jQuery-JSON

По своей сути он использует JSON.stringify, но возвращается к своему собственному парсеру, если браузер не реализует его.

Эван Плейс
источник
4

Поскольку Firefox не преобразует какой-либо объект в экранный объект; если вы хотите получить такой же результат, как JSON.stringify(obj):

function objToString (obj) {
    var tabjson=[];
    for (var p in obj) {
        if (obj.hasOwnProperty(p)) {
            tabjson.push('"'+p +'"'+ ':' + obj[p]);
        }
    }  tabjson.push()
    return '{'+tabjson.join(',')+'}';
}
Абденнур ТУМИ
источник
4

Для не вложенных объектов:

Object.entries(o).map(x=>x.join(":")).join("\r\n")
Алекс Сюч
источник
2
var o = {a:1, b:2};

o.toString=function(){
  return 'a='+this.a+', b='+this.b;
};

console.log(o);
console.log('Item: ' + o);

Поскольку Javascript v1.0 работает везде (даже в IE), он является нативным подходом и позволяет очень экономно смотреть на ваш объект при отладке и в процессе производства https://developer.mozilla.org/en/docs/Web/JavaScript/Reference / Global_Objects / Объект / ToString

Полезный пример

var Ship=function(n,x,y){
  this.name = n;
  this.x = x;
  this.y = y;
};
Ship.prototype.toString=function(){
  return '"'+this.name+'" located at: x:'+this.x+' y:'+this.y;
};

alert([new Ship('Star Destroyer', 50.001, 53.201),
new Ship('Millennium Falcon', 123.987, 287.543),
new Ship('TIE fighter', 83.060, 102.523)].join('\n'));//now they can battle!
//"Star Destroyer" located at: x:50.001 y:53.201
//"Millennium Falcon" located at: x:123.987 y:287.543
//"TIE fighter" located at: x:83.06 y:102.523

Также в качестве бонуса

function ISO8601Date(){
  return this.getFullYear()+'-'+(this.getMonth()+1)+'-'+this.getDate();
}
var d=new Date();
d.toString=ISO8601Date;//demonstrates altering native object behaviour
alert(d);
//IE6   Fri Jul 29 04:21:26 UTC+1200 2016
//FF&GC Fri Jul 29 2016 04:21:26 GMT+1200 (New Zealand Standard Time)
//d.toString=ISO8601Date; 2016-7-29
Alex
источник
2

Если вы можете использовать lodash, вы можете сделать это следующим образом:

> var o = {a:1, b:2};
> '{' + _.map(o, (value, key) => key + ':' + value).join(', ') + '}'
'{a:1, b:2}'

С Лодаш map() вы также можете перебирать объекты. Это сопоставляет каждую запись ключа / значения с ее строковым представлением:

> _.map(o, (value, key) => key + ':' + value)
[ 'a:1', 'b:2' ]

А также join() положить записи массива вместе.

Если вы можете использовать ES6 Template String, это также работает:

> `{${_.map(o, (value, key) => `${key}:${value}`).join(', ')}}`
'{a:1, b:2}'

Обратите внимание, что это не идет рекурсивно через объект:

> var o = {a:1, b:{c:2}}
> _.map(o, (value, key) => `${key}:${value}`)
[ 'a:1', 'b:[object Object]' ]

Как узелutil.inspect() будет делать:

> util.inspect(o)
'{ a: 1, b: { c: 2 } }'
kwarnke
источник
1

Если вы используете JavaScript-каркас Dojo, то для этого уже есть встроенная функция: dojo.toJson (), которая будет использоваться следующим образом.

var obj = {
  name: 'myObj'
};
dojo.toJson(obj);

который вернет строку. Если вы хотите преобразовать объект в данные json, добавьте второй параметр true.

dojo.toJson(obj, true);

http://dojotoolkit.org/reference-guide/dojo/toJson.html#dojo-tojson

Крис О'Коннелл
источник
1
/*
    This function is as JSON.Stringify (but if you has not in your js-engine you can use this)
    Params:
        obj - your object
        inc_ident - can be " " or "\t".
        show_types - show types of object or not
        ident - need for recoursion but you can not set this parameter.
*/
function getAsText(obj, inc_ident, show_types, ident) {
    var res = "";
    if (!ident)
        ident = "";
    if (typeof(obj) == "string") {
        res += "\"" + obj + "\" ";
        res += (show_types == true) ? "/* typeobj: " + typeof(obj) + "*/" : "";
    } else if (typeof(obj) == "number" || typeof(obj) == "boolean") {
        res += obj;
        res += (show_types == true) ? "/* typeobj: " + typeof(obj) + "*/" : "";
    } else if (obj instanceof Array) {
        res += "[ ";
        res += show_types ? "/* typeobj: " + typeof(obj) + "*/" : "";
        res += "\r\n";
        var new_ident = ident + inc_ident;
        var arr = [];
        for(var key in obj) {
            arr.push(new_ident + getAsText(obj[key], inc_ident, show_types, new_ident));
        } 
        res += arr.join(",\r\n") + "\r\n";
        res += ident + "]";
    } else {
        var new_ident = ident + inc_ident;      
        res += "{ ";
        res += (show_types == true) ? "/* typeobj: " + typeof(obj) + "*/" : "";
        res += "\r\n";
        var arr = [];
        for(var key in obj) {
            arr.push(new_ident + '"' + key + "\" : " + getAsText(obj[key], inc_ident, show_types, new_ident));
        }
        res += arr.join(",\r\n") + "\r\n";
        res += ident + "}\r\n";
    } 
    return res;
};

Пример использования:

var obj = {
    str : "hello",
    arr : ["1", "2", "3", 4],
b : true,
    vobj : {
        str : "hello2"
    }
}

var ForReading = 1, ForWriting = 2;
var fso = new ActiveXObject("Scripting.FileSystemObject")
f1 = fso.OpenTextFile("your_object1.txt", ForWriting, true)
f1.Write(getAsText(obj, "\t"));
f1.Close();

f2 = fso.OpenTextFile("your_object2.txt", ForWriting, true)
f2.Write(getAsText(obj, "\t", true));
f2.Close();

your_object1.txt:

{ 
    "str" : "hello" ,
    "arr" : [ 
        "1" ,
        "2" ,
        "3" ,
        4
    ],
    "b" : true,
    "vobj" : { 
        "str" : "hello2" 
    }

}

your_object2.txt:

{ /* typeobj: object*/
    "str" : "hello" /* typeobj: string*/,
    "arr" : [ /* typeobj: object*/
        "1" /* typeobj: string*/,
        "2" /* typeobj: string*/,
        "3" /* typeobj: string*/,
        4/* typeobj: number*/
    ],
    "b" : true/* typeobj: boolean*/,
    "vobj" : { /* typeobj: object*/
        "str" : "hello2" /* typeobj: string*/
    }

}
море кг
источник
1
Было бы хорошо и объяснение того, что делает код, и пример того, как его использовать. Спасибо
estemendoza
1

Для вашего примера, я думаю console.log("Item:",o) , будет проще всего. Но, console.log("Item:" + o.toString) также будет работать.

Использование метода номер один использует хороший выпадающий список в консоли, поэтому длинный объект будет работать хорошо.

Fuzzyzilla
источник
1
function objToString (obj) {
    var str = '{';
    if(typeof obj=='object')
      {

        for (var p in obj) {
          if (obj.hasOwnProperty(p)) {
              str += p + ':' + objToString (obj[p]) + ',';
          }
      }
    }
      else
      {
         if(typeof obj=='string')
          {
            return '"'+obj+'"';
          }
          else
          {
            return obj+'';
          }
      }



    return str.substring(0,str.length-1)+"}";
}
Mauro
источник
1

Надеюсь этот пример поможет всем тем, кто все работает над массивом объектов

var data_array = [{
                    "id": "0",
                    "store": "ABC"
                },{
                    "id":"1",
                    "store":"XYZ"
                }];
console.log(String(data_array[1]["id"]+data_array[1]["store"]));
Кушал Чхеда
источник
1

Если вы не используете aplay join () для Object.

const obj = {one:1, two:2, three:3};
let arr = [];
for(let p in obj)
    arr.push(obj[p]);
const str = arr.join(',');
Илья Индиго
источник
1

Циркулярные ссылки

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

let s = JSON.stringify(obj, refReplacer());

БОНУС : а вот обратная функция такой сериализации

Камил Келчевски
источник