如何将JavaScript对象转换为字符串?
例:
var o = {a:1, b:2}
console.log(o)
console.log('Item: ' + o)
Run Code Online (Sandbox Code Playgroud)
输出:
对象{a = 1,b = 2} //非常好的可读输出:)
项目:[object Object] //不知道里面是什么:(
这似乎是一个已解决的问题,但我无法找到解决方案.
基本上,我读取了一个JSON文件,更改了一个密钥,并将新的JSON写回到同一个文件中.一切正常,但我放松了JSON格式.所以,而不是:
{
name:'test',
version:'1.0'
}
Run Code Online (Sandbox Code Playgroud)
我明白了
{name:'test',version:'1.1'}
Run Code Online (Sandbox Code Playgroud)
在Node.js中有没有办法将格式良好的JSON写入文件?
在Chrome中,console对象定义了两种似乎做同样事情的方法:
console.log(...)
console.dir(...)
Run Code Online (Sandbox Code Playgroud)
我在网上读到dir了一个在记录它之前获取对象副本的地方,而log只是将引用传递给控制台,这意味着当你去检查你记录的对象时,它可能已经改变了.然而,一些初步测试表明没有区别,并且它们都可能在不同的状态下显示对象,而不是记录它们.
在Chrome控制台(Ctrl+ Shift+ J)中试试这个,看看我的意思:
> o = { foo: 1 }
> console.log(o)
> o.foo = 2
Run Code Online (Sandbox Code Playgroud)
现在,展开[Object]日志语句下方并注意它显示foo的值为2.如果您使用dir而不是重复实验,则同样如此log.
我的问题是,为什么这两个看似相同的函数存在console?
尝试使用Web套接字传递错误消息时遇到问题.我可以复制我面临的问题,JSON.stringify以迎合更广泛的受众:
// node v0.10.15
> var error = new Error('simple error message');
undefined
> error
[Error: simple error message]
> Object.getOwnPropertyNames(error);
[ 'stack', 'arguments', 'type', 'message' ]
> JSON.stringify(error);
'{}'
Run Code Online (Sandbox Code Playgroud)
问题是我最终得到一个空对象.
浏览器
我首先尝试离开node.js并在各种浏览器中运行它.Chrome版本28给了我相同的结果,有趣的是,Firefox至少做了一次尝试,但遗漏了消息:
>>> JSON.stringify(error); // Firebug, Firefox 23
{"fileName":"debug eval code","lineNumber":1,"stack":"@debug eval code:1\n"}
Run Code Online (Sandbox Code Playgroud)
替换功能
然后我查看了Error.prototype.它表明原型包含诸如toString和toSource之类的方法.知道函数不能被字符串化,我在调用JSON.stringify时包含了一个replacer函数来删除所有函数,但后来意识到它也有一些奇怪的行为:
var error = new Error('simple error message');
JSON.stringify(error, function(key, value) {
console.log(key === ''); // true (?)
console.log(value === error); // true …Run Code Online (Sandbox Code Playgroud) Node的console.log似乎默认截断输出,例如,查看API的输出:
{ '@': { xmlns: 'http://ec2.amazonaws.com/doc/2012-03-01/' },
requestId: '123456',
reservationSet:
{ item:
{ reservationId: 'r-123456',
ownerId: '123456',
groupSet: [Object],
instancesSet: [Object],
requesterId: '123456' } } }
Run Code Online (Sandbox Code Playgroud)
如您所见,[object]未扩展.我想这是一个方便的措施 - 很多人不希望节点默认喷出数千行.有没有办法告诉它扩展记录项目的内容?
我无法从javascript访问json数据.请帮我如何从javascript中的json数据访问数据.
我有像json这样的数据
{"success":true,"input_data":{"quantity-row_122":"1","price-row_122":" 35.1 "}}
Run Code Online (Sandbox Code Playgroud)
我已经尝试过console.log(数据)但是记录了打印对象对象
success:function(data){
console.log(data);
}
Run Code Online (Sandbox Code Playgroud)
如何打印console.log特定数据?我需要打印数量-row_122 = 1 price-row_122 = 35.1
对于嵌套的Object或Array
var obj = {
foo:
{
foo:
{
foo:
{
foo:
{
foo:
{
foo: 'foo'
}
}
}
}
}
};
console.log(obj);
util.debug(obj);
util.debug(util.inspect(obj));
Run Code Online (Sandbox Code Playgroud)
该console.log或util.debug+util.inspect
{ foo: { foo: { foo: [Object] } } }
DEBUG: [object Object]
DEBUG: { foo: { foo: { foo: [Object] } } }
Run Code Online (Sandbox Code Playgroud)
在一定程度上,它[Object]没有进一步细节.
这总是令人烦恼,因为我无法调查实际值.
为什么node(或V8)实现这样?有没有解决方法?
谢谢.
编辑:我收到了一个建议
console.log(JSON.stringify(obj));
结果
{"foo":{"foo":{"foo":{"foo":{"foo":{"foo":"foo"}}}}}}
它有点工作,但显然整个都是stringifyed,并且我可能无法在调试时为所有对象输出执行此操作.不是通用的方法.
EDIT2:
解:
console.log(util.inspect(obj,{ depth: null }));
输出:
{ foo: …
我试图使用xml2js解析和查询xml中的元素.我的xml字符串如下:
var xml = "<config><test>Hello</test><data>SomeData</data></config>";
Run Code Online (Sandbox Code Playgroud)
我想要的是提取值并将其分配给 var extractedData
这是我到目前为止所拥有的:
var parser = new xml2js.Parser();
parser.parseString(xml, function(err,result){
//Extract the value from the data element
extractedData = result['data'];
}
Run Code Online (Sandbox Code Playgroud)
这不起作用.有人可以指出我是如何从我的xml中获取值的吗?
谢谢
这似乎不起作用.有人能告诉我这里可能存在什么问题吗?
我正试图看看对象包含的内容
随着console.log(obj)控制台从线切断,我不能看到整个结构.
然后我尝试将其写入文件
fs.writeFile('test', JSON.stringify(obj));
Run Code Online (Sandbox Code Playgroud)
但我得到一些关于循环引用的错误.
有没有其他方法来查看对象大声笑?该对象是来自nodejs websocket模块的"连接".文档非常差,我似乎无法找到保存IP地址的属性:(
小提示:我非常熟悉console.log()、JSON.stringify()、等Object.prototype.toString()-util.inspect()这个问题不是问如何显示对象的内容,而是问为什么节点的行为在不同情况下会发生变化。
我知道我可以console.log(someObject)并且节点将打印:
[object Object]
Run Code Online (Sandbox Code Playgroud)
Node js 函数返回 [object Object] 而不是字符串值对此有一些很好的信息。
我知道那[object Object]是来自Object.prototype.toString()
我知道我可以console.log(JSON.stringify(someObject, null, 2)并且节点将打印:
{
foo: 'bar'
}
Run Code Online (Sandbox Code Playgroud)
或使用util.inspect()等。请参阅此答案
然而,有时节点似乎会实际打印对象内容
如果我创建一个名为runme.js以下内容的新文件:
console.log({foo: 'bar'})
并且运行node runme.js节点将打印
{ foo: 'bar' }
不是[object Object]
为什么节点不打印[object Object]?
编辑:根据基思的问题,[object Object]当我运行时会出现:
console.log(`Check me out ${{foo: 'bar'}}`)
Run Code Online (Sandbox Code Playgroud)
日志[object Object]
是什么决定了节点是否使用Object.prototype.toString() …
javascript ×9
node.js ×7
json ×3
object ×2
arrays ×1
console ×1
console.log ×1
logging ×1
string ×1
tostring ×1
xml ×1
xml-parsing ×1