Javascript JSON.stringify正在忽略对象属性

Javascript JSON.stringify正在忽略对象属性,javascript,json,kendo-ui,stringify,Javascript,Json,Kendo Ui,Stringify,请参见jsfiddle示例 由于某些原因,JSON.stringify忽略了一些字段。有没有办法强制JSON.stringify解析它们 正如JSFIDLE所示。。。此代码 <script src="http://cdn.kendostatic.com/2012.2.710/js/kendo.all.min.js"></script> <script> var model = kendo.data.Model.define({id: "ID",

请参见jsfiddle示例

由于某些原因,JSON.stringify忽略了一些字段。有没有办法强制JSON.stringify解析它们

正如JSFIDLE所示。。。此代码

<script src="http://cdn.kendostatic.com/2012.2.710/js/kendo.all.min.js"></script>
    <script>
    var model = kendo.data.Model.define({id: "ID", fields: {"Name":{type: "string"}}});
    var obj = new model();
    obj.set("Name","Johhny Foosball");
    document.write("<br />obj.dirty property exists: ");
    document.write(obj.dirty);
    document.write("<br/>obj.uid property exists: ");
    document.write(obj.uid);
    document.write("<br/>But they dont show in JSON.stringify():<br/>");    
    document.write(JSON.stringify(obj));
</script>

var model=kendo.data.model.define({id:“id”,字段:{“Name”:{type:“string”}});
var obj=新模型();
对象集(“名称”、“Johny Foosball”);
document.write(“
obj.dirty属性存在:”); 文件写入(对象脏); document.write(“
obj.uid属性存在:”); 文件写入(对象uid); document.write(“
但它们不显示在JSON.stringify():
”)中; document.write(JSON.stringify(obj));
将输出:

obj.dirty属性存在:true

存在obj.uid属性:b4af4dfc-9d94-4a2d-b286-d6f4cbc991d8

但它们不会显示在JSON.stringify()中:


{“ID”:“”“Name”:“johny Foosball”}

当对象有自己的
toJSON()
实现时,
JSON.stringify()
使用从该方法返回的对象并将其字符串化
kendo.data.Model
定义它自己的
toJSON()
方法,该方法只返回在模型上定义的属性,这就是为什么在字符串结果中看不到其他值(例如
dirty
id
uid

如果stringify方法看到一个包含toJSON方法的对象,它将调用该方法,并将返回的值字符串化。这允许对象确定自己的JSON表示

如果必须拥有对象上的所有属性,则可以选择以下选项:

var model = kendo.data.Model.define({
    id: "ID",
    fields: {
        "Name": { type: "string" }
    }
});
var obj = new model();
obj.set("Name","Johhny Foosball");    
var newObj = $.extend({}, obj);
delete newObj.toJSON;
document.write(newObj.dirty);
document.write(JSON.stringify(newObj));
…还有


基本上我使用了
jQuery.extend
来克隆对象,然后删除了
toJSON
函数。使用风险自负!:)

有些相关,当我来到这里寻找类似情况的解决方案时:对于那些在剑道向其添加各种奇怪的隐藏属性之前寻找找回原始对象的方法的人,请执行以下操作:

cleanObject = JSON.parse(JSON.stringify(kendoDataItem));
当我需要将所选项目从剑道树传递到json格式化程序指令时,遇到了这种情况。但你知道吗,剑道把我原来的目标搞砸了

<div kendo-tree-view="tree" k-data-source="treeData" k-on-change="selectedItem=dataItem">
    {{dataItem.text}}
</div>

<json-formatter open="1" json="selectedItem"></json-formatter>

{{dataItem.text}

如果您在NodeJ中工作,您可以使用:

import * as util from 'util';
util.inspect(obj)

它没有使用JSON.stringify,而是使用自己的JSON.stringify方法。这发生在我的Sequelize上。在添加新属性之前,我将对象字符串化,如下所示:

objStringified = JSON.stringify(obj) // uses its own JSON.stringify method
obj = JSON.parse(objStringified) // only shows properties specified as columns in its model
obj.dirty = "whatever";
finalObj = JSON.stringify(objParsed); // now it doesn't have its own JSON.stringify method, so dirty property appears

这有点老了。但我也面临着类似的问题。就在服务返回分页查询结果之前,我需要在对象中插入一个字段和值

    var universities = await University.paginate(pagingOptions);
    const updatedDocsTemp = universities.docs.map(university=>
    {
        university["Favorite"] = showonlytempfavorites; 
        return university;
    });
    universities.docs = updatedDocsTemp;
然而,当调用stringify的代码时

JSON.stringify(universities)
最喜欢的字段被忽略。如, 我确认这是有效的

    var universities = await University.paginate(pagingOptions);
    universities = JSON.parse(JSON.stringify(universities));
    const updatedDocsTemp = universities.docs.map(university=>
    {
        university["Favorite"] = showonlytempfavorites; 
        return university;
    });
    universities.docs = updatedDocsTemp;

我想知道为什么a-2输给尼科斯·帕帕乔乔。

真的吗?这家伙说
JSON.stringify
不起作用,你在例子中使用了
JSON.stringify
?仔细阅读.JSON.stringify不起作用。该代码如何返回正确的值?