我们的一些用户仍然使用IE8.当尝试将数据发布到我们的服务器时,他们中的一些偶尔会报告问题(通过标记为"SAVE"的大按钮).
IE8显示的脚本错误是:意外调用方法或属性访问,始终指向KnockoutJS 2.2.0(现在调试)库450行中的同一行,如下所示:
return JSON.stringify(ko.utils.unwrapObservable(data), replacer, space);
Run Code Online (Sandbox Code Playgroud)
我的代码中的方法位于堆栈跟踪的根部,发生这种情况的方法如下:
self.saveSingle = function (onSuccess, onFailure) {
ko.utils.arrayForEach(self.days(), function (day) {
day.close();
});
var jsonData = ko.toJSON(self);
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: applicationLocation + "/api/assignmentapi/save",
data: jsonData,
success: function (data) {
self.status(data.Status);
self._isDirty(false);
ko.utils.arrayForEach(self.days(), function (day) {
day.clean();
});
if (onSuccess)
onSuccess();
},
error: function (data) {
onFailure();
},
dataType: "json"
});
};
Run Code Online (Sandbox Code Playgroud)
当我们将对象转换为JSON时,我们会删除一些对POST不必要的属性,使用这种方法:http://www.knockmeout.net/2011/04/controlling-how-object-is-converted -to.html
OurType.prototype.toJSON = function () {
var copy = ko.toJS(this);
delete copy.someUnneededProperty1; …Run Code Online (Sandbox Code Playgroud) 可能是重复的问题,但找不到答案。我想将包含一些 JSON 字符串作为值的 javascript 对象字符串化。
例如:
var obj = {id:1, options:"{\"code\":3,\"type\":\"AES\"}"};
Run Code Online (Sandbox Code Playgroud)
如您所见,键 'options' 的值是一个 JSON 字符串。我想对对象“obj”进行字符串化,而不对内部 JSON 字符串进行双重字符串化。
除了使用 JSON 字符串解析每个值并将对象字符串化之外,是否有任何干净整洁的解决方案?
与此问题类似:
将Dictionary <string,string>转换为单个聚合字符串表示的最佳方法?
但是我想忽略Dictionary中的类型,因为我打算调用每个键和值的ToString()方法.
我认为它不应该是一个问题,但我无法弄清楚如何传入一个无类型的字典,而不仅仅是把它作为对象...任何想法?
[编辑]添加工作代码片段:这是有效的 - 感谢twoflower
public string DumpDictionary<TKey, TElement>(IDictionary<TKey, TElement> dictionary)
{
StringBuilder sb = new StringBuilder();
foreach (var v in dictionary)
{
sb.AppendLine(v.Key.ToString() + ":" + v.Value.ToString());
}
return sb.ToString();
}
Run Code Online (Sandbox Code Playgroud) 我正在为书籍创建发票,并希望通过ajax提交.我试图json编码发票中的书籍数组,但我一直得到一个空白值
//create item list
var order_items = [];
$('#mi_books tbody tr.userbooks').each(function(index)
{
var bookisbn = $(this).find('td .mi_isbn').text();
var bookdata = [];
bookdata['isbn'] = bookisbn;
bookdata['title'] = $(this).find('.mi_title').text();
bookdata['qty'] = $(this).find('.mi_qty').text();
bookdata['price'] = $(this).find('.mi_price').text();
order_items.push(bookdata);
});
alert(JSON.stringify(order_items));
alert(order_items.toString());
console.log(order_items);
Run Code Online (Sandbox Code Playgroud)
alert(JSON.stringify(order_items));
输出: [[]]
alert(order_items.toString());
输出: blank
console.log(order_items);
输出:
Array[1]
0: Array[0]
isbn: "9781401216672"
length: 0
price: "1007"
qty: "1"
title: "Batman: The Killing Joke"
__proto__: Array[0]
length: 1
__proto__: Array[0]
Run Code Online (Sandbox Code Playgroud)
我的数组正在创建,但不知怎的,我似乎无法对json进行编码?难道我做错了什么?
有什么方法可以将 javascript 对象转换为 JSON。
我不能用
JSON.stringify(<obj>)
因为下面链接中的 JSON 对象中没有 stringify 方法。
例子:
var obj = {'x':1,'y':2}
Run Code Online (Sandbox Code Playgroud)
现在如果我跑
console.log(JSON.stringify(obj));
Run Code Online (Sandbox Code Playgroud)
然后我收到这个错误。
错误:类型错误:对象 # 没有方法 'stringify'
当字符串化的字符串被直接发送到请求时,它不会被添加任何斜杠。
var data = { "A": "Aa", "B": "Bb", "C": "Cc" }; // This is JSON object
data = JSON.stringify(data); // Getting stringified
var obj = {method: "POST",
url: 'http://..XX..XXX.....com',
data: data // String is being sent as it is
};
$http(obj);// Have no slashes added
//Output: {"A":"Aa","B":"Bb","C":"Cc"}
Run Code Online (Sandbox Code Playgroud)
但是,如果将字符串化的字符串设置为对象的属性并将对象发送到服务器,则该字符串带有反斜杠。
var data = { "A": "Aa", "B": "Bb", "C": "Cc" };
data = JSON.stringify(data);
var obj = {method: "POST",
url: 'XXX',
data: { // String is being sent as a value …Run Code Online (Sandbox Code Playgroud) 有没有办法让下面的浅拷贝只得到一层深?我有一种使用完全不同的设计来解决这个问题的方法,但我想知道是否有其他人遇到过我之前尝试转换为字符串的问题。
var SomeObjClass = function() {
var self = this;
this.group = {
members: [self]
};
};
var p = new SomeObjClass();
var str = JSON.stringify(p);
Run Code Online (Sandbox Code Playgroud) 我试图深度克隆一个对象,用k = JSON.parse(JSON.stringify(a))说"a".我使用stringify方式很重要,因为我试图将对象保存到文件中然后从中加载.
我偶然发现了克隆对象的引用问题,如下所示:
var obj={};
obj.importantProperty={s:2};
obj.c=obj.importantProperty;
obj.d=obj.importantProperty;
console.log( obj.c === obj.d ); // Returns true
var cloned = JSON.parse(JSON.stringify(obj));
console.log( cloned.c === cloned.d ); // Returns falseRun Code Online (Sandbox Code Playgroud)
在此先感谢任何帮助我的人:)
在我的应用程序中,我使用 FileReader 上传文件并将其解析为ArrayBuffer. 文件属性保存在一个对象中,结构如下:
file: {
name: 'fileName', // type string
content: ArrayBuffer // read like FileReader.readAsArrayBuffer(uploadedFile)
}
Run Code Online (Sandbox Code Playgroud)
当我想将文件保存到后端时,我正在使用 axios,并发送这样的请求:
axios({
url: "/api/v3/synchronous/commands",
method: "POST",
data: JSON.stringify(file),
headers,
})
Run Code Online (Sandbox Code Playgroud)
问题是当它被字符串化时,content里面的文件变成了一个空对象{}。如何解决此问题,而不必转换ArrayBuffer为其他内容,然后再将其转换回ArrayBuffer?
我正在尝试BigInt在我的库中添加支持,但遇到了JSON.stringify.
库的性质允许不必担心类型歧义和反序列化,因为序列化的所有内容都会进入服务器,并且永远不需要任何反序列化。
我最初想出了以下简化的方法,只是为了抵消 Node.js 向TypeError: Do not know how to serialize a BigInt我抛出的问题:
// Does JSON.stringify, with support for BigInt:
function toJson(data) {
return JSON.stringify(data, (_, v) => typeof v === 'bigint' ? v.toString() : v);
}
Run Code Online (Sandbox Code Playgroud)
但是由于它将BigInt每个值都转换为字符串,因此每个值最终都被包裹在双引号中。
是否有任何解决方法,也许是 Node.js 格式化实用程序中的一些技巧,以从JSON.stringify每个BigInt将被格式化为开放值的地方产生结果?这是 PostgreSQL 理解和支持的内容,因此我正在寻找一种方法来生成BigInt符合 PostgreSQL 的JSON 。
例子
const obj = {
value: 123n
};
console.log(toJson(obj));
// This is what I'm getting: {"value":"123"}
// This is …Run Code Online (Sandbox Code Playgroud) stringify ×10
javascript ×7
json ×7
parsing ×2
angularjs ×1
arraybuffer ×1
bigint ×1
c# ×1
dictionary ×1
jquery ×1
knockout.js ×1
node.js ×1
object ×1
postgresql ×1
web ×1