所以当我偶然发现新的JsonSerializable接口时,我在php.net上闲逛,了解有关将PHP对象序列化为JSON的信息.它只有PHP> = 5.4,而且我在5.3.x环境中运行.
这种功能如何实现PHP <5.4?
我还没有使用JSON,但是我正在尝试在应用程序中支持API层,并且将数据对象(否则将被发送到视图)转储到JSON中将是完美的.
如果我尝试直接序列化对象,它会返回一个空的JSON字符串; 这是因为我认为json_encode()不知道该对象究竟做了什么.应予递归降低对象到一个数组,然后编码该?
$data = new Mf_Data();
$data->foo->bar['hello'] = 'world';
Run Code Online (Sandbox Code Playgroud)
echo json_encode($data) 产生一个空对象:
{}
Run Code Online (Sandbox Code Playgroud)
var_dump($data) 但是,按预期工作:
object(Mf_Data)#1 (5) {
["_values":"Mf_Data":private]=>
array(0) {
}
["_children":"Mf_Data":private]=>
array(1) {
[0]=>
array(1) {
["foo"]=>
object(Mf_Data)#2 (5) {
["_values":"Mf_Data":private]=>
array(0) {
}
["_children":"Mf_Data":private]=>
array(1) {
[0]=>
array(1) {
["bar"]=>
object(Mf_Data)#3 (5) {
["_values":"Mf_Data":private]=>
array(1) {
[0]=>
array(1) {
["hello"]=>
string(5) "world"
}
}
["_children":"Mf_Data":private]=>
array(0) …Run Code Online (Sandbox Code Playgroud) 我是第一次学习对象序列化.我尝试阅读和"谷歌搜索"模块泡菜和搁置的差异,但我不确定我理解它.什么时候使用哪一个?Pickle可以将每个python对象转换为可以保存到文件中的字节流.那为什么我们需要模块搁置?泡菜不快吗?
假设你有这两个类,Foo和Bar,其中Bar扩展了Foo并实现了它们 Serializable
class Foo {
public String name;
public Foo() {
this.name = "Default";
}
public Foo(String name) {
this.name = name;
}
}
class Bar extends Foo implements java.io.Serializable {
public int id;
public Bar(String name, int id) {
super(name);
this.id = id;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,Foo没有实现Serializable.那么当条形序列化时会发生什么?
public static void main(String[] args) throws Exception {
FileOutputStream fStream=new FileOutputStream("objects.dat");
ObjectOutputStream oStream=new ObjectOutputStream(fStream);
Bar bar=new Bar("myName",21);
oStream.writeObject(bar);
FileInputStream ifstream = new FileInputStream("objects.dat");
ObjectInputStream istream = new ObjectInputStream(ifstream);
Bar bar1 = …Run Code Online (Sandbox Code Playgroud) 我有一个很大的php对象,我想序列化并存储在MySql数据库中.表编码是,UTF-8并且用于保存序列化对象编码的列也是UTF-8.
问题是该对象包含一个包含法语字符的文本字符串.
例如:
Merci d'avoir passé commande avec Lovre. Voici le récapitulatif de votre commande
Run Code Online (Sandbox Code Playgroud)
当我序列化对象然后再次反序列化它时,字符串被维护并且格式正确.
但是,当我将序列化对象存储到MySql数据库然后再次检索它然后反序列化它时,字符串变为如下所示:
Merci d'avoir passé commande avec Lovre. Voici le récapitulatif de votre commande
Run Code Online (Sandbox Code Playgroud)
将对象存储在数据库中时出现问题.
笔记:
text.我有一个对象如下:
public class Records implements java.io.Serializable{
private int cId;
private int pId;
private int vlaue;
private int tag;
public Records(int c, int p, int v, int t){
this.cId=c;
this.pId=p;
this.value=v;
this.tag=t;
}
}
Run Code Online (Sandbox Code Playgroud)
我已经收集了大量数据,构建了上述类中的对象并将它们分解为磁盘.
我忘记包含在类文件中的一个转储是访问每个对象的值的方法.例如,访问特定对象的cId值.
我修改了类定义以添加这样的方法,但后来我无法将对象反序列化回记录类并获得此运行时错误:
java.io.InvalidClassException: Records; local class incompatible: stream classdesc serialVersionUID = -1232612718276774474, local class serialVersionUID = -8244963718951538904
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:579)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1600)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1513)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1749)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368)
at DeSerialise.main(DeSerialise.java:21)
Run Code Online (Sandbox Code Playgroud)
我想我需要告诉java他们是相同的定义并修改serialVersionUID但不太确定如何?任何想法都会受到欢迎!
我正在阅读关于PHP的序列化/反序列化概念.我想知道它们是如何存储在filesystem/db中的.我猜它是二进制格式.但是,我想知道整个班级是如何存储的?我知道数据成员中的数据可以存储,但方法是如何存储的?
我的意思是,PHP如何知道在函数中编写的代码是什么someFunc()?
$obj = new ClassName();
$obj->someFunc();
$serial = serialize($obj);
$unserialobj = unserialize($serial);
$unserialobj->someFunc();
Run Code Online (Sandbox Code Playgroud)
PHP可以知道第2行要做什么,但它知道如何在#5行中做一个非序列化对象?它也保存代码吗?
我需要从服务器向客户端发送动态对象数组.一个例子作为数组,它将类的对象Figure与其坐标,颜色等信息结合在一起.
我试图使用这样的东西来发送数据:
for i := 0 to ServerSocket.Socket.ActiveConnections - 1 do
begin
ServerSocket.Socket.Connections[i].SendText(some values); // then parsing this text to get values
end;
Run Code Online (Sandbox Code Playgroud)
但是我觉得这样做真的很糟糕.那么,拜托,您能告诉我如何发送和接收某些对象的数组(使用IdTCPClient/Server或Client/ServerSockets)的正确方法吗?
我正在开发一个项目,该项目使用了几张可以拥有100,000多个密钥的地图.目前我正在使用缩写形式的数据在每个运行时创建地图以节省时间,以便地图只有大约1,000个键.但我想测试我可用的全部数据.
我想知道如何在类中创建一个地图,然后将该对象保存到硬盘驱动器,然后能够在不同的类中引用该对象,这样我每次测试时都不需要创建和填充地图类.我正在使用Eclipse在Java中编写类.
编辑:我相信它被称为对象序列化,但如果它被序列化,我必须在使用前阅读整个地图吗?或者它实际上是否与调用局部变量相同?
我正在使用Node.js使用Pug渲染页面.我的JavaScript代码:
router.get('/', function(req, res, next) {
res.render("index",{
title:"??",
user:{name:"luo",age:19}
});
});
Run Code Online (Sandbox Code Playgroud)
我的帕格代码:
script.
window.user = #{user}
Run Code Online (Sandbox Code Playgroud)
但结果是这样的:
<script>window.user = [object object]</script>
Run Code Online (Sandbox Code Playgroud)
如何正确获取对象的值?