如何在屏幕上显示 JSON 表示而不是 [Object Object]
Posted
技术标签:
【中文标题】如何在屏幕上显示 JSON 表示而不是 [Object Object]【英文标题】:How to display a JSON representation and not [Object Object] on the screen 【发布时间】:2016-04-24 04:22:26 【问题描述】:我正在制作一个带有 beta 版本的 AngularJS 2 应用程序。我想在我的页面中显示一个对象的 JSON 表示,但它显示 [Object Object]
而不是 key1:value1 ....
来自我可以使用的组件:
get example() return JSON.stringify(this.myObject);
然后在模板中:
example
但是如果我有一个对象数组并且想要打印这些对象的列表,我该怎么做呢?
使用:
<ul>
<li *ngFor="#obj of myArray">obj</li>
</ul>
结果如下:
- [对象对象] - [对象对象] - [对象对象] - [对象对象]等等。有没有办法将它们显示为 JSON?
【问题讨论】:
【参考方案1】:如果您想查看您在 Web 应用程序中的对象中拥有的内容,请在组件 html 模板中使用 json 管道,例如:
<li *ngFor="let obj of myArray">obj | json</li>
使用 Angular 4.3.2 测试且有效。
【讨论】:
谢谢,json 堆是我需要的...从 angular 1 发生了一些变化:) @foralobo Json Pipe 在 Angular 1 中也可用;) 太棒了!谢谢。【参考方案2】:我们可以使用角管json
jsonObject | json
【讨论】:
【参考方案3】:循环 JSON 对象:在 Angluar (6.0.0+) 中,现在他们提供管道 keyvalue
:
<div *ngFor="let item of object| keyvalue">
item.key - item.value
</div>
DO READ ALSO
仅显示 JSON
object | json
【讨论】:
最喜欢的答案,因为它两者兼而有之,而且您可能需要两者:“仅 json”用于简单变量。但是对于任何像具有循环引用的表单控件,您需要将循环作为第一个选项提供。两者在 Angular9 中仍然是正确的语法。【参考方案4】:可以在不使用ngFor
的情况下将对象内容转储为 JSON。示例:
对象
export class SomeComponent implements OnInit
public theObject: any =
simpleProp: 1,
complexProp:
InnerProp1: "test1",
InnerProp2: "test2"
,
arrayProp: [1, 2, 3, 4]
;
标记
<div [innerHTML]="theObject | json"></div>
输出(通过美化器以获得更好的可读性,否则在单行中输出)
"simpleProp": 1,
"complexProp":
"InnerProp1": "test1",
"InnerProp2": "test2"
,
"arrayProp": [
1,
2,
3,
4
]
我还发现了一个 JSON 格式化程序和查看器,它显示更大的 JSON 数据更具可读性(类似于 JSONView Chrome 扩展):https://www.npmjs.com/package/ngx-json-viewer
<ngx-json-viewer [json]="someObject" [expanded]="false"></ngx-json-viewer>
【讨论】:
另外,如果您从 div 更改为 pre 标签,您会自动获得正确的格式。 @Oddleif - 是的。我还添加了对一个非常有用的查看器的引用,它应该更方便地显示信息。【参考方案5】:<li *ngFor="let obj of myArray">obj | json</li>
【讨论】:
同样的已经回答了,你必须在 *ngFor 循环中的 obj 之前使用 let 关键字。【参考方案6】:有两种方法可以获得值:-
-
使用点符号 (obj.property) 访问对象的属性。
通过传入键值来访问对象的属性,例如 obj["property"]
【讨论】:
【参考方案7】:用新语法更新其他人的答案:
<li *ngFor="let obj of myArray">obj | json</li>
【讨论】:
【参考方案8】:this.http.get<any>('http://192.168.1.15:4000/GetPriority')
.subscribe(response =>
this.records=JSON.stringify(response) // impoprtant
console.log("records"+this.records)
);
【讨论】:
嘿,为了改进您所写的内容,您可以在答案中添加一些解释,以确保不太熟悉这些概念的读者能够理解您的决定。【参考方案9】:如果你有一个对象数组并且你想在组件中反序列化它们
get example() this.arrayOfObject.map(i => JSON.stringify (i) ) ;
然后在模板中
<ul>
<li *ngFor="obj of example">obj</li>
</ul>
【讨论】:
以上是关于如何在屏幕上显示 JSON 表示而不是 [Object Object]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 5 中以编程方式在特定屏幕(即主显示器而不是外部显示器)上显示窗口? [苹果系统; Xcode 15]
如何从将服务扩展到 MainActivity 的 LocationServices 活动传递纬度 n 经度值以在屏幕上显示它们而不是 Log.d