PHP对象数组经JSON写入txt后无法遍历读取属性如何解决?
问题原因
file()函数返回值是按行拆分的字符串数组,你写入的JSON内容为整行存储,此时$read数组仅第一个元素是完整JSON字符串,直接遍历$read拿到的$i为字符串类型,不存在price属性,这是报错的直接原因。json_encode序列化PHP自定义类对象时,默认仅序列化公共属性,不会保留类标识,直接json_decode得到的是stdClass类实例,并非原Item类的实例,若需要还原为原类对象需要额外处理。
修复方案
方案1:直接解析JSON读取属性(无需还原为Item类)
读取文件时使用file_get_contents获取完整JSON字符串,解析后即可访问属性:
// 读取完整文件内容 $jsonContent = file_get_contents("ProducePrice.txt"); // 解析JSON,默认返回stdClass对象数组 $produceList = json_decode($jsonContent); foreach($produceList as $item) { echo $item->price; }
方案2:还原为原Item类实例
如果需要得到原Item类的对象,可选择以下两种实现:
方式A:使用serialize/unserialize序列化(仅适合PHP生态内使用)
// 写入时序列化对象数组 file_put_contents("ProducePrice.txt", serialize($produceList)); // 读取时反序列化直接得到Item类对象数组 $produceList = unserialize(file_get_contents("ProducePrice.txt")); foreach($produceList as $item) { echo $item->price; }
方式B:JSON解析后手动转换为Item实例
$jsonContent = file_get_contents("ProducePrice.txt"); // 解析为关联数组 $tempList = json_decode($jsonContent, true); $produceList = []; foreach($tempList as $temp) { $produceList[] = new Item($temp['name'], $temp['price']); } foreach($produceList as $item) { echo $item->price; }
内容的提问来源于stack exchange,提问作者user14849955
相关产品推荐
相关产品推荐

