php json字符串导出csv,使用PHP解析其中包含JSON的CSV

本文讨论了在PHP中解析CSV文件并处理包含JSON字符串的行时遇到的问题。当JSON字符串中需要包含双引号时,由于CSV和JSON对双引号的转义规则不同,导致解析困难。作者列举了三种尝试的解决方案,包括在CSV中使用额外的双引号、使用反斜杠转义和转义CSV中的反斜杠,但每个方案都有其局限性。文章寻求一种有效的方法来正确解析含有双引号的JSON字符串,特别是在处理空字符串和转义字符时。
摘要由CSDN通过智能技术生成

Introduction

我有一个CSV文件,其中每个字段都附有双引号( " ) . 每行中的最后一个字段是JSON字符串表示 . 我想编写一个解析CSV文件的PHP脚本,然后解析JSON字符串 . 这就是我现在拥有的 .

while (($line = fgetcsv($handle, 1000000, ";", '"')) !== false)

{

// Another loop to loop over the fields

// ...

parse_json(end($line));

}

private function parse_json($json_string)

{

if (!empty($json_string))

{

$json = json_decode($json_string, true);

$msg = sprintf("The following description is not in proper JSON format: %s", $json_string);

if (is_null($json))

{

// The function json_decode returns null if the string is not properly JSON formatted.

throw new Exception($msg);

}

}

}

使用CSV文件中的以下行,我在PHP中获得以下数组 .

"A";"B";"C";"D";"E";;"{""Name"":""Richard B Mephisto""}"

array ('Name' => 'Richard B Mephisto');

Problem description

当我想在JSON字符串的一个值中允许双引号时,麻烦就开始了 . 对于JSON,我需要使用反斜杠转义双引号,而对于CSV,我需要使用另一个双引号来转义双引号 . 如果我想要以下数组,CSV文件和解析器应该如何?

array ('Name' => 'Richard "B" Mephisto');

Failed attempts

1)在CSV文件中使用以下行 .

"A";"B";"C";"D";"E";;"{""Name"":""""Richard B Mephisto""""}"

在解析JSON时,在调用 json_decode 之前,将每个 "" 替换为 /" . 这适用于这种情况,但我还需要允许空字符串 .

"A";"B";"C";"D";"E";;"{""Name"":""}"

这些也将被这个解决方案所取代 .

2)在CSV文件中使用反斜杠 . 原则上,JSON字符串应如下所示:

{"Name": "Richard \"B\" Mephisto"}

所以我在CSV文件中尝试这个:

"A";"B";"C";"D";"E";;"{""Name"":\""Richard B Mephisto\""}"

结果如下:

以下描述不是正确的JSON格式:{“JSON_key”:“Richard \”B \“”Mephisto“”}“

不知何故,它与转义字符和双引号一起无法正常工作 .

3)转义CSV中的反斜杠 .

"A";"B";"C";"D";"E";;"{""JSON_key"":""Richard \\""B\\"" Mephisto""}"

结果:

The following description is not in proper JSON format: {"JSON_key":"Richard \\"B\\" Mephisto"}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值