我从API获取文章/文章。 JSON对象有所不同,有些文章具有其他一些文章没有的属性。
我需要遍历项目并操纵属性(如果已设置)。
解决这个问题的最佳方法是什么?
实际上现在我做的事情让我觉得很难看......
<asp:GridView ID="gridviewSLds" runat="server" CellPadding="0" ForeColor="#333333" GridLines="Both" AutoGenerateColumns="False" OnRowCreated="gridviewSLds_RowCreated">
<AlternatingRowStyle BackColor="White" />
<FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
<RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
<SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
<SortedAscendingCellStyle BackColor="#FDF5AC" />
<SortedAscendingHeaderStyle BackColor="#4D0000" />
<SortedDescendingCellStyle BackColor="#FCF6C0" />
<SortedDescendingHeaderStyle BackColor="#820000" />
<Columns>
<asp:TemplateField ItemStyle-BorderWidth="0">
<ItemTemplate>
<asp:HiddenField ID="HiddenField1" runat="server" Value='<%# Eval("Id") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="item" HeaderText="Metric" SortExpression="item" ReadOnly="false" />
<asp:TemplateField HeaderText="Item">
<ItemTemplate>
<asp:TextBox onfocusin="select()" runat="server" Text='<%# Bind("item") %>'
ID="txtfocus" class="alertpopup" AutoPostBack="true"></asp:TextBox>
</ItemTemplate>
<HeaderStyle HorizontalAlign="Center" />
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Control Type">
<ItemTemplate>
<asp:TextBox onfocusin="select()" runat="server" Text='<%# Bind("itemCtrlType") %>'
ID="txtfocus2" class="modalpopup2" AutoPostBack="true"></asp:TextBox>
</ItemTemplate>
<HeaderStyle HorizontalAlign="Center" />
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
</Columns>
</asp:GridView>
$(document).ready(function(){
$('.alertpopup').focus(function () {
var itemvalue = $('.alertpopup').val();
alert(itemvalue);
});
});
答案 0 :(得分:1)
由于您的来源具有不可预测的形状,我不认为有任何方法可以解析数据。
你可以在一个单独的函数中抽象丑陋,这样你的主脚本就可以了:
$parsed = parseAPI($items);
如果使用$items = json_decode($apiResponse,true)
,则会得到一个数组而不是一个对象。然后,您可以使用数组上的+
运算符和默认数组将所有API响应强制转换为相同的形状。
$defaultItem = [
'salutation' => null,
'eventDate' => null,
'eventEndDate' => null,
...
];
现在,当您从API获取项目时,您可以执行以下操作:
$items = json_decode($apiResponse,true);
foreach($items as &$item) $item += $defaultItem;
现在$items
的每个成员都拥有您期望的所有密钥。如果缺少任何密钥,则会插入$defaultItem
匹配的密钥和值。