修改API的JSON数据

时间:2016-09-24 11:08:26

标签: php json laravel laravel-5.2

我已经构建了一个基本上有三个调用的API。首先,调用检索令牌。接下来,我有一种自动完成功能,它返回数据和它应该查找的相应表。这样的数据就像这样返回

[
  {
    "result": "Apples",
    "table": "fruitTable"
  },
  {
    "result": "Bread",
    "table": "breadTable"
  },
  {
    "result": "Pie",
    "table": "pieTable"
  }
]

我的最终路线如下

Route::get('returnSelectedResult/{table}/{selected}', array('uses'=>'APIController@returnSelectedResult'));

因此,它使用上面的查找结果来获取正确的表和所选的选项。然后我做以下

public function returnSelectedResult($table, $selected)
{
    $tableData = DB::table($table)->where('search_item', $selected)->get();
    return response($tableData, 200);
}

所以一切正常。但是,表中的数据是平的。所以返回给API用户的最后一件事是这样的

[
  {
    "search_item": "Bread",
    "num_types": 34,
    "most_ordered": 'Baggette',
    "most_popular_day": 'Saturday',
    "average_profit": 3.5,
  }
]

我所展示的是一个非常简洁的版本,还有更多的数据返回,但它们都处于同一级别。我需要返回给用户的是更多内容 这条线

[
  {
    "searched" : {
        "search_item": "Bread"
    },
    "types" : {
        "num_types": 34
    },
    "analytics" : {
        "most_ordered": 'Baggette',
        "most_popular_day": 'Saturday',
        "average_profit": 3.5
    }
  }
]

实现这样的目标的最佳途径是什么?

由于

3 个答案:

答案 0 :(得分:1)

您可以使用查询结果显式构建数组。

答案 1 :(得分:1)

如果你真的想构建api,你应该使用变换器来更好地呈现数据。

你可以使用phpleague / fractal或者如果你想要完整的api包我推荐你尝试dingo / api。

答案 2 :(得分:0)

做这样的事, 现在我已经完成了分析

class MainClass
{
  public $searched;
  public $types;
  public $analytics;
}

class AnalyticsClass
{
  public $most_ordered;
  public $most_popular_day;
  public $average_profit;
}

$obj_data = new AnalyticsClass();
$obj_data->most_ordered = 'Baggette';  
$obj_data->most_popular_day = 'Saturday';
$obj_data->average_profit = 3.5;

$obj_main = new MainClass();
$obj_main->analytics = $obj_data;