OneSignal网页通知报错:无法将获取的URL数据插入数组
排查与解决方案
嘿,我梳理了你的问题:你已经成功从URL拿到了一个关联数组,但要么没法把dummy1、dummy2插入这个数组,要么是没法用数组里的真实值替换掉JSON模板里的dummy1、dummy2和[id]占位符?我分两种场景给你解决方案:
场景1:把dummy1、dummy2插入到已获取的数组中
如果你的需求是给现有的数组新增这两个值,那直接用PHP的数组赋值就行,超简单:
// 假设你拿到的数组存在$fetchedData变量里 $fetchedData['contents_en'] = 'dummy1'; $fetchedData['headings_en'] = 'dummy2';
要是这么做还失败,你可以检查这几点:
- 先
var_dump($fetchedData)看看数组是不是真的存在,有没有被意外覆盖成其他类型(比如字符串、null) - 确认这个数组不是只读的(比如有没有用
const或者readonly修饰) - 检查键名有没有重复,要是数组里已经有
contents_en这个键,那就是覆盖而不是新增了
场景2:用数组数据填充JSON模板
从你给出的JSON来看,里面的dummy1、dummy2和[id]明显是占位符,需要替换成数组里的真实内容对吧?按这个步骤来:
第一步:把JSON模板转成PHP数组
先把JSON字符串转成可操作的数组:
$jsonTemplate = '{"app_id":"35fi6c27-5f39-4s9f-94db-79bf123g0f9","included_segments":["All"],"data":{"foo":"bar"},"contents":{"en":"dummy1"},"headings":{"en":"dummy2"},"url":"http:\/\/www.gggg.in\/view.php?id=[id]"}'; $jsonArray = json_decode($jsonTemplate, true);
第二步:替换占位符
用你拿到的数组值替换掉模板里的占位:
// 还是假设数组存在$fetchedData里 $jsonArray['contents']['en'] = $fetchedData['content']; // 把dummy1换成数组里的content内容 $jsonArray['headings']['en'] = $fetchedData['headings']; // 把dummy2换成数组里的headings标题 $jsonArray['url'] = str_replace('[id]', $fetchedData['id'], $jsonArray['url']); // 替换URL里的[id]为真实ID
第三步:转回JSON准备发送
最后把修改后的数组转成JSON字符串:
$finalJson = json_encode($jsonArray, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); // 之后就可以发送这个$finalJson了
要是这一步出问题,你可以:
- 检查
$fetchedData的键名是不是拼写对了,比如是不是headings还是heading,别打错字 - 用
var_dump($jsonArray)看看替换后的数组状态,确认占位符有没有被正确替换 - 如果
json_encode返回false,直接用json_last_error_msg()看具体报错,大概率是编码问题,加上JSON_UNESCAPED_UNICODE参数一般能解决
通用排查小技巧
不管哪种场景,都别凭感觉判断变量内容,直接用var_dump()或者print_r()输出变量的真实状态,能帮你快速定位问题!另外还要注意变量的作用域,比如如果是在函数里操作数组,要确保数组能被函数访问到(要么传参,要么用global声明)。
内容的提问来源于stack exchange,提问作者user2226832
相关产品推荐
相关产品推荐

