从firebase解码返回json

Posted

技术标签:

【中文标题】从firebase解码返回json【英文标题】:decode return json from firebase 【发布时间】:2017-12-16 08:14:27 【问题描述】:

我想从 url-> "https://fcm.googleapis.com/fcm/send" 解码这个 json 但不幸的是我没有成功,我真的不知道该怎么办请帮助我,在下面你看到我的代码:

    function decodeJSON($ids)

    $MyString = sendFCMToMultiple($ids);
    echo "return:" . $MyString . php_EOL;
    //$MyDecode = json_decode($MyString, false, 512, JSON_BIGINT_AS_STRING);
    //$MyDecode = json_decode($MyString, true, 512, JSON_BIGINT_AS_STRING);
    $MyDecode = json_decode($MyString);
    $MultiCastID = $MyDecode->multicast_id;
    $Success = $MyDecode->success;
    $Failure = $MyDecode->failure;
    $CanonicalIDS = $MyDecode->canonical_ids;
    $Results = $MyDecode->results;
    //echo 'Var MultiCastID=' . var_dump($MultiCastID) . PHP_EOL;
    echo 'MultiCastID to Str=' . number_format($MultiCastID, 0, '.', '') . PHP_EOL;
    echo 'MultiCastID=' . $MultiCastID . PHP_EOL;
    echo 'Success=' . $Success . PHP_EOL;
    echo 'Failure=' . $Failure . PHP_EOL;
    echo 'CanonicalIDS=' . $CanonicalIDS . PHP_EOL;
    echo 'Results=' . $Results . PHP_EOL;

    echo '=================================================================' . PHP_EOL;

这是来自 fcm url 的原始和主要 json:


  "multicast_id": 7640049088650537742,
  "success": 2,
  "failure": 2,
  "canonical_ids": 0,
  "results": [
    
      "error": "NotRegistered"
    ,
    
      "error": "NotRegistered"
    ,
    
      "message_id": "0:1513401047065944%93a06d80f9fd7ecd"
    ,
    
      "message_id": "0:1513401047066546%93a06d80f9fd7ecd"
    
  ]

这是返回并从我的代码中显示:

"multicast_id":7640049088650537742,"success":2,"failure":2,"canonical_ids":0,"results":["error":"NotRegistered","error":"NotRegistered","message_id":"0:1513401047065944%93a06d80f9fd7ecd","message_id":"0:1513401047066546%93a06d80f9fd7ecd"]
MultiCastID to Str=7640049088650537984
MultiCastID=7.6400490886505E+18
Success=2
Failure=2
CanonicalIDS=0
Results=
=================================================================

还有我的问题:

首先:我不能使用 json 字符串来 json_decode($MyString, false, 512, JSON_BIGINT_AS_STRING) 并为所有键返回空值;这就是为什么我说我想要 multicast_id 键的字符串值或整数类型,但 json_decode 本身自动大整数浮点数,我不喜欢它,我想要整数和/或字符串值,尽管我使用了第 5 行和第 6 行并且因为评论在代码中,但不是真的。 第二:结果键数组对我来说非常重要,因为我明白谁没有收到,谁收到了,为什么?谢谢。

【问题讨论】:

可能与您关于 bigints 的第一点有关:***.com/questions/19520487/… 【参考方案1】:

您的第二点只是部分答案,以访问 json 中的结果(在 php 5.6 中测试):

foreach ($MyDecode->results as $result) 
    if (isset($result->error)) 
        echo 'Found error: ' . $result->error . PHP_EOL;
     elseif (isset($result->message_id)) 
        echo 'Found message id: ' . $result->message_id . PHP_EOL;
    

输出:

Found error: NotRegistered
Found error: NotRegistered
Found message id: 0:1513401047065944%93a06d80f9fd7ecd
Found message id: 0:1513401047066546%93a06d80f9fd7ecd

【讨论】:

我测试了你的代码,它的工作就像魅力!我必须对你说的一件事我还不能从 multicast_id 键解析为字符串值,即使使用你建议的解决方案......?? !!!非常感谢你的胸罩!!!?? @astrangeloop 只是 基于***.com/questions/19520487/…中的答案,您可以在解码前使用preg_replace将bigint转换为json中的字符串:$MyString = sendFCMToMultiple($ids);$MyString = preg_replace('/("multicast_id":\s*)(\d+)/', '\1"\2"', $MyString);$MyDecode = json_decode($MyString);var_dump($MyDecode->multicast_id);给:@987654328 @ 真的真的很感谢,祝你一切顺利,希望每个舞台生活永远好运文胸!!!谢谢!!! ???????????????​​pan>

以上是关于从firebase解码返回json的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP、curl 解码从 Flickr API 返回的 json 字符串

Dart:从 Firebase 快照中解码 Json

Firebase 函数返回 Json

Python 请求返回 JSON 解码器错误

将 JSON 数据从 Parse Cloud Code 返回到 Swift 中的可解码结构

如何使用firebase函数返回保存在firebase存储中的文件的json内容