【问题标题】:Convert PHP object to JSON format problem with single item arrays使用单项数组将 PHP 对象转换为 JSON 格式问题
【发布时间】:2019-09-30 06:56:00
【问题描述】:

我正在创建一个在 Vuetify 数据表中显示一些信息的服务。 问题是当我从使用 json_encode 的服务器获得答案时。其中一个值有时是单个值,它将被转换为对象而不是数组。据我所知,使用 vuetify 需要它是一个数组才能正确显示。

我已经尝试明确告诉对象它是一个数组。

[
 {
 "values": "something",
  "Items": {
    "item" : [{ "Iteminfo": "Item1" },
            { "Iteminfo": "Item2"}
             ]
   }
 }
]

///////// result with single Object
[
 {
 "values": "something",
  "Items": {
    "item" : { "Iteminfo": "Item1"}
  }
 }
]

//// Vuetify


     <v-data-table
          :headers="headers"
          :items="orders"
          :expand="expand"
          :dark="false"
          item-key="Name"
        >
          <template v-slot:items="props">
            <tr @click="props.expanded = !props.expanded">
               <td>Order: {{ props.item.Ordernumber }} , Klantnaam:  {{               
           props.item.Name }}
           </td>  

            </tr>
          </template>
          <template v-slot:expand="props">
            <v-card flat>   
              <v-card-text>
        <table>
         <tr>
          <th>Artikelnummer</th>
         </tr>                  
         <tr v-for="item in props.item.Items.item">
          <td>{{ item.Article }}</td>
         </tr> 
        </table>
       </v-card-text>
      </v-card>
     </template>
    </v-data-table>

///For getting the information
<script>

    export default{        

      data () {
    return {

      filiaalnummer: '',
      expand: false,
      headers: [
        {
          text: 'Orders',
          align: 'left',
          sortable: false,
          value: 'name'
        },    

      ],
      orders: [],

    }
  },  
      methods: {

           getOrders : function(){
               console.log(this.filiaalnummer);
            axios.get('/orders/getOrders/'+this.filiaalnummer)
            .then(response => this.orders =response.data)
            .catch(error => console.log(error.response.data));
        },    

      }

    }

  </script>
Laravel Server Side 
return json_encode($arrayOfObjectsContainingTheItems);

要获取对象内部的项目,我需要将它们放在数组中。并且当呈现单个对象时,它也会编码为一个对象,这导致 Vuetify 尝试将该对象的所有单个属性读取为 Items。 我可以明确告诉 PHP 它需要是一个数组吗?或者我可以在 Vuetify 中做一些事情来读取对象吗?

【问题讨论】:

  • 你在哪里跑json_encode可以分享代码吗?
  • 我更新了 The Post 以包含编码和请求
  • 我已经尝试明确告诉对象它是一个数组。,在哪里?
  • PHP 对象内的服务器端 ``` $this->item = array($ItemsWhichSometimesCanBeASingleObject); ``` 不确定是否是一个好的输入方式,似乎 json_encode 仍然将其视为对象

标签: php json laravel datatable vuetify.js


【解决方案1】:

我使用 JsonSerializable 接口修复了它

    public function jsonSerialize() {
      if(is_array($this->item)){
        return $this->item;
      }else{
        return array($this->item);
      }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-28
    • 2018-05-19
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多