各位大佬帮忙看下写的返回是否不是 JSON 格式或者是结构不对


$picture = Db::name('carousel')->where(['carouselstatus' => 0])->select();
foreach ($picture as $key => &$item) {
  $item['carouselurl'] = $SERVER['REQUESTSCHEME']."://".$SERVER['HTTPHOST']. $item['carouselurl'];
}
return $this->returnJson('1', '查询成功', $picture);

function returnJson($code, $msg, $data = [])
{
  $arr['code'] = $code;
  $arr['msg'] = $msg;
 if (in_array('', $arr)) {
  return false;
  }
  if (!empty($data)) {
  $arr['data'] = $data;
  }
  return jsonencode($arr);
}
```*

今天这个又报错了,返回的可能不是json串或者结构不对,现在这些数据都是死的只是在数据库读取一下,没有其他变化,哪个大佬能帮忙解读下~~
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 9
AScorpio

这行代码不对,应该 $picture[$key]['carouselurl']

$item['carouselurl'] = $SERVER['REQUESTSCHEME']."://".$SERVER['HTTPHOST']. $item['carouselurl'];

这段代码,return false 不合理,应该返回同样的格式

if (in_array('', $arr)) {
  return json_encode([]);
  }
4年前 评论
╰ゝSakura 4年前

@AScorpio 大佬 你提的第一个我不是在循环里挨个插入吗? 这样做不行吗?关于第二个我让他直接返回json空是吗? 那对于安卓来说也是结构变了,问题是否在return之前把,很纠结

4年前 评论
AScorpio 4年前
FirstBlood (作者) (楼主) 4年前
AScorpio 4年前
AScorpio 4年前
FirstBlood (作者) (楼主) 4年前
╰ゝSakura

file

4年前 评论

@╰ゝSakura 我试着去加了参数,但是直接返回为NULL

4年前 评论
╰ゝSakura 4年前

正常情况下直接访问不报错,但是隔一天访问就会崩溃,但是直接api访问接口也不报错........ :sob: :sob: :sob: :sob: :sob:

4年前 评论
AScorpio

return new Response(0, []);
return new Response(500, '错误消息');
除了用于返回数据,还用于判断方法函数是否执行成功等

class Response
{

    protected $code;
    protected $msg;
    protected $data;

    /**
     * Response constructor.
     * @param integer|\Exception $code
     * @param string $data_or_msg
     */
    public function __construct($code, $data_or_msg = '')
    {
        if($code instanceof \Exception) {
            $this->msg = $code->getMessage();
            $this->code = $code->getCode()?$code->getCode():1000;
        } else {
            $this->code = $code;
            if($this->code) {
                $this->msg = $data_or_msg;
            } else {
                $this->data = $data_or_msg;
            }
        }

    }

    public function getCode()
    {
        return $this->code;
    }

    public function setData($data)
    {
        $this->data = $data;
    }

    /**
     * @return mixed
     */
    public function getData()
    {
        return $this->data;
    }

    public function getMsg()
    {
        return $this->msg;
    }

    public function isSuccess()
    {
        return $this->code == 0?true:false;
    }

    public function asArray()
    {
        $data = $this->data;
        if(is_object($data) || is_array($data)) {
            $data = ArrayHelper::toArray($data);
        }
        return [
            'code'=>$this->code,
            'msg'=>$this->msg,
            'data'=>$data,
        ];
    }

    public function __toString()
    {
        return json_encode($this->asArray());
    }
}
4年前 评论

举个栗子:

<?php

$data = ['id' => 1, 'name' = 'test'];

// 上面的数据使用 json_encode 后
echo json_encode($data);
// {"id":1,"name":"test"}

// 嗯,看起来并没有什么问题
// 但是当 $data 为空数组后
$data = [];
echo json_encode($data);
// []
// json_encode 后 ,这就导致了app那边数据类型不匹配崩溃。

原因这里有详解:问答:与安卓对接需要注意那些呢

4年前 评论

@熊二哈 你好这个知道,关键读的数据库市一定有数据的

4年前 评论

我怎么感觉这条查询语句写错了啊

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!