为了账号安全,请及时绑定邮箱和手机立即绑定

使用插值变量注入 JSON 字符串不起作用

使用插值变量注入 JSON 字符串不起作用

PHP
缥缈止盈 2022-01-08 20:45:34
我正在使用Rocketium API来自动生成视频。为了准备视频中使用的“场景”,我从数据库表中的行构建了一个 JSON 字符串:foreach ($products as $product) {    if ($product['image_one_url']) {        $product_image = $product['image_one_url'];    } else {        $product_image = 'no_image.png';    }    $string[] = [        "text" => $product['product_name'],        "image" => $product_image    ];}$string = json_encode($string, JSON_UNESCAPED_SLASHES);$string = addslashes($string);现在我正在使用这个字符串并尝试使用插值变量将其插入此处:curl_setopt($ch, CURLOPT_POSTFIELDS, "{\"videoBackground\": \"background.jpg\", \"audio_mood\": \"inspirational\", \"logoImage\": \"logo.png\", \"title\": \"Products\", \"themeId\": \"5a15310cabc5e17e6bf29525\", \"scenes\": {$string}}");出于某种原因,这对我不起作用,尽管当我将我的 JSON 字符串与一个工作示例进行比较时,它看起来是相同的格式:curl_setopt($ch, CURLOPT_POSTFIELDS, "{\"videoBackground\": \"background.jpg\", \"audio_mood\": \"inspirational\", \"logoImage\": \"logo.png\", \"title\": \"Products\", \"themeId\": \"5a15310cabc5e17e6bf29525\", \"scenes\": [{\"text\" : \"{Hello there\", \"image\" : \"https://rocketium.com/videos/1234567890/resized/abcdefgh.mp4\", \"fontSize\" : \"14px\"}, { \"text\" : \"Slide 2 goes here\", \"image\" : \"https://rocketium.com/videos/1234567890/resized/abcdefgh.mp4\" }, { \"text\" : \"Slide 3 here\", \"image\" : \"https://rocketium.com/videos/1234567890/resized/abcdefgh.mp4\" }, { \"text\" : \"Slide 4 here\", \"image\" : \"image_goes_here.jpg\" }]}");我添加了斜线和所有内容。这是插值变量的问题还是我缺少的其他问题?
查看完整描述

2 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

与其尝试将一个字符串塞入另一个字符串,而是手动转义引号并希望获得最好的结果,而是使用数据结构并仅在完成后转换为 JSON。


像这样的东西:


foreach ($products as $product) {


    if ($product['image_one_url']) {

        $product_image = $product['image_one_url'];

    } else {

        $product_image = 'no_image.png';

    }


    $string[] = [

        "text" => $product['product_name'],

        "image" => $product_image

    ];


}


$template = json_decode("{\"videoBackground\": \"background.jpg\", \"audio_mood\": \"inspirational\", \"logoImage\": \"logo.png\", \"title\": \"Products\", \"themeId\": \"5a15310cabc5e17e6bf29525\"}");


$template['scenes'] = $string;


// Now you can encode the whole thing to JSON in one go

curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($template));


查看完整回答
反对 回复 2022-01-08
?
手掌心

TA贡献1942条经验 获得超3个赞

我只是要告诉你为什么你的代码不起作用。因为您实际上向json 字符串注入了额外的反斜杠,而在工作示例中,没有真正的反斜杠(它们只是出现在代码中以告诉 PHP 下一个字符是双引号而不是结束字符)

这个字符串"\""只包含一个双引号,而这个字符串'\"'包含一个反斜杠和一个双引号

工作示例中的场景属性实际上包含这个

 $scenes = '[{"text":"Definitions","image":"vesa_definitions.jpg"}]';

但这就是您通过使用所做的 addslashes()

 $scenes = '[{\"text\":\"Definitions\",\"image\":\"vesa_definitions.jpg\"}]';


查看完整回答
反对 回复 2022-01-08
  • 2 回答
  • 0 关注
  • 143 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信