我有一个对象(解析树),其中包含对其他节点的引用的子节点.
我想序列化这个对象,使用JSON.stringify(),但我得到:JSON.stringify()因为我提到的结构.
我怎么能解决这个问题?对于我来说,序列化对象中是否表示了对其他节点的这些引用并不重要.
另一方面,在创建对象时从对象中删除这些属性似乎很乏味,我不想对解析器(narcissus)进行更改.
我JSON.stringify是一个json对象
result = JSON.stringify(message, my_json, 2)
Run Code Online (Sandbox Code Playgroud)
在2上面的说法应该是相当打印结果.如果我这样做,它会这样做alert(result).但是,我想通过将其附加到div中来将其输出给用户.当我这样做时,我只会出现一行.(我不认为它有效,因为中断和空格不被解释为html?)
{ "data": { "x": "1", "y": "1", "url": "http://url.com" }, "event": "start", "show": 1, "id": 50 }
Run Code Online (Sandbox Code Playgroud)
有没有办法以JSON.stringify漂亮的打印方式将结果输出到div?
我有一个包含循环引用的JavaScript对象定义:它有一个引用父对象的属性.
它还具有我不想传递给服务器的功能.我如何序列化和反序列化这些对象?
我读过这样做的最好方法是使用Douglas Crockford的stringify.但是,我在Chrome中收到以下错误:
TypeError:将循环结构转换为JSON
代码:
function finger(xid, xparent){
this.id = xid;
this.xparent;
//other attributes
}
function arm(xid, xparent){
this.id = xid;
this.parent = xparent;
this.fingers = [];
//other attributes
this.moveArm = function() {
//moveArm function details - not included in this testcase
alert("moveArm Executed");
}
}
function person(xid, xparent, xname){
this.id = xid;
this.parent = xparent;
this.name = xname
this.arms = []
this.createArms = function () {
this.arms[this.arms.length] = new arm(this.id, this);
}
}
function group(xid, xparent){
this.id = …Run Code Online (Sandbox Code Playgroud) 我需要一个函数从任何参数构建一个JSON有效字符串,但是:
通常它应该能够以截断它们为代价来处理大对象.
作为参考,此代码失败:
var json = JSON.stringify(window);
Run Code Online (Sandbox Code Playgroud)
避免递归问题很简单:
var seen = [];
return JSON.stringify(o, function(_, value) {
if (typeof value === 'object' && value !== null) {
if (seen.indexOf(value) !== -1) return;
else seen.push(value);
}
return value;
});
Run Code Online (Sandbox Code Playgroud)
但现在,除了复制并更改道格拉斯Crockford的代码追踪深度的,我没有发现任何方式,以避免像很深刻的对象堆栈溢出window或任何event.有简单的解决方案吗?
我试图通过以下方式将多维Javascript数组传递到我网站上的另一个页面:
在数组上使用JSON.stringify
将结果值分配给输入字段
将该字段发布到第二页
在发布的值上使用json_decode
然后var_dump来测试
(直接回显发布的变量,看它是否完全通过)
第一页的Javascript:
var JSONstr = JSON.stringify(fullInfoArray);
document.getElementById('JSONfullInfoArray').value= JSONstr;
Run Code Online (Sandbox Code Playgroud)
第二页的PHP:
$data = json_decode($_POST["JSONfullInfoArray"]);
var_dump($data);
echo($_POST["JSONfullInfoArray"]);
Run Code Online (Sandbox Code Playgroud)
echo工作正常,但var_dump返回NULL
我做错了什么?
这让我解决了:
$postedData = $_POST["JSONfullInfoArray"];
$tempData = str_replace("\\", "",$postedData);
$cleanData = json_decode($tempData);
var_dump($cleanData);
Run Code Online (Sandbox Code Playgroud)
我不知道为什么,但帖子是通过一堆"\"字符分隔字符串中的每个变量
使用json_last_error()Bart返回时将其弄清楚JSON_ERROR_SYNTAX
所以我正在创建一个包含元素信息的数组.我遍历所有元素并保存索引.出于某种原因,我无法将此数组转换为json对象!
这是我的数组循环:
var display = Array();
$('.thread_child').each(function(index, value){
display[index]="none";
if($(this).is(":visible")){
display[index]="block";
}
});
Run Code Online (Sandbox Code Playgroud)
我尝试通过以下方式将其转换为JSON对象:
data = JSON.stringify(display);
Run Code Online (Sandbox Code Playgroud)
它似乎没有发送正确的JSON格式!
如果我像这样手动编码,它可以工作并发送信息:
data = {"0":"none","1":"block","2":"none","3":"block","4":"block","5":"block","6":"block","7":"block","8":"block","9":"block","10":"block","11":"block","12":"block","13":"block","14":"block","15":"block","16":"block","17":"block","18":"block","19":"block"};
Run Code Online (Sandbox Code Playgroud)
当我对JSON.stringify对象发出警报时,它看起来与手动编码的对象相同.但它不起作用.
我疯了试图解决这个问题!我在这里错过了什么?发送此信息以获得手动编码格式的最佳方法是什么?
我使用这个ajax方法发送数据:
$.ajax({
dataType: "json",
data:data,
url: "myfile.php",
cache: false,
method: 'GET',
success: function(rsp) {
alert(JSON.stringify(rsp));
var Content = rsp;
var Template = render('tsk_lst');
var HTML = Template({ Content : Content });
$( "#task_lists" ).html( HTML );
}
});
Run Code Online (Sandbox Code Playgroud)
使用GET方法,因为我正在显示信息(不更新或插入).只将显示信息发送到我的php文件.
结束解决方案
var display = {};
$('.thread_child').each(function(index, value){
display[index]="none";
if($(this).is(":visible")){
display[index]="block";
}
});
$.ajax({
dataType: "json",
data: display, …Run Code Online (Sandbox Code Playgroud) JSON.stringify(eventObject);
得到:
TypeError: Converting circular structure to JSON
dojox.json.ref.toJson(eventObject);
得到:
TypeError: Accessing selectionEnd on an input element that cannot have a selection.
是否有一些库/代码可以用来完成它?
这里我创建一个JavaScript对象并将其转换为JSON字符串,但在这种情况下JSON.stringify返回"[object Object]",而不是显示对象的内容.我该如何解决这个问题,以便JSON字符串实际上包含对象的内容?
var theObject = {name:{firstName:"Mark", lastName:"Bob"}};
alert(JSON.stringify(theObject.toString())); //this alerts "[object Object]"
Run Code Online (Sandbox Code Playgroud) 所以,我有兴趣发现JSON.stringify将RegExp简化为空对象 - 文字(小提琴):
JSON.stringify(/^[0-9]+$/) // "{}"
Run Code Online (Sandbox Code Playgroud)
这种行为有望吗?我意识到RegExp是一个没有要序列化属性的对象.也就是说,日期也是对象; 但JSON.stringify()设法产生一个有意义的字符串:
JSON.stringify(new Date) // "2014-07-03T13:42:47.905Z"
Run Code Online (Sandbox Code Playgroud)
我希望JSON能够通过使用给予RegExp相同的考虑.JSON.stringify
当使用JSON.stringify(或类似的东西)对对象进行字符串化时,有一种方法可以限制字符串化深度,即只有n级深入到对象树中并忽略之后的所有内容(或者更好:将占位符放在那里,表示留下了一些东西出来)?
我知道这JSON.stringify需要一个表单的替换函数,function (key, value)但我没有找到一种方法来获取当前键值对的原始对象的深度,交给更换器函数.
有没有办法使用默认的JSON.stringify实现?或者我已经达到了我应该自己实现字符串化的程度?或者是否有另一个可以推荐的具有此选项的字符串化库?