正在加载文档...
iCMS:json json处理标签
iCMS JSON标签技术文档
JSON标签 (json)
JSON标签用于获取和解析JSON数据,支持从URL获取或直接解析JSON字符串。
iCMS:json 标签
支持参数
参数名 | 类型 | 默认值 | 说明 |
---|---|---|---|
url | 字符串 | - | JSON数据URL地址 |
json | 字符串 | - | JSON字符串 |
cache | 布尔值 | false | 是否缓存结果 |
time | 整数 | -1 | 缓存时间(秒) |
page | 布尔值/整数 | false | 是否按页缓存 |
返回值
解析后的JSON数据数组。如果解析失败,将显示错误信息并返回空数组。
使用示例
<!-- 从URL获取JSON数据 -->
<!--{iCMS:json url="https://api.example.com/data" cache="true" time="3600"}-->
<div class="data-list">
<!--{foreach key="key" value="item" from="$json"}-->
<div class="item">
<h3><!--{$item.title}--></h3>
<p><!--{$item.description}--></p>
</div>
<!--{/foreach}-->
</div>
<!-- 解析JSON字符串 -->
<!--{iCMS:json json='{"name":"张三","age":25,"skills":["PHP","JavaScript","CSS"]}'}-->
<div class="user-info">
<h3><!--{$json.name}--></h3>
<p>年龄: <!--{$json.age}--></p>
<p>技能:
<!--{foreach key="k" value="skill" from="$json.skills"}-->
<span class="skill"><!--{$skill}--></span>
<!--{/foreach}-->
</p>
</div>
常见应用场景
1. 调用第三方API
<!--{iCMS:json url="https://api.weather.com/forecast?city=beijing" cache="true" time="1800"}-->
<div class="weather-forecast">
<h2>天气预报</h2>
<div class="current">
<h3>当前天气: <!--{$json.current.condition}--></h3>
<p>温度: <!--{$json.current.temperature}-->°C</p>
<p>湿度: <!--{$json.current.humidity}-->%</p>
</div>
<div class="forecast">
<h3>未来天气</h3>
<ul>
<!--{foreach key="key" value="day" from="$json.forecast"}-->
<li>
<span class="date"><!--{$day.date}--></span>
<span class="condition"><!--{$day.condition}--></span>
<span class="temp"><!--{$day.low}-->°C - <!--{$day.high}-->°C</span>
</li>
<!--{/foreach}-->
</ul>
</div>
</div>
2. 配置数据
<!--{iCMS:json json='{"theme":{"primary":"#3498db","secondary":"#2ecc71"},"layout":{"sidebar":"left","width":"1200px"}}' cache="true"}-->
<style>
:root {
--primary-color: <!--{$json.theme.primary}-->;
--secondary-color: <!--{$json.theme.secondary}-->;
--layout-width: <!--{$json.layout.width}-->;
}
</style>
<div class="container" style="max-width: <!--{$json.layout.width}-->;">
<div class="layout layout-<!--{$json.layout.sidebar}-->">
<!-- 页面内容 -->
</div>
</div>
3. 动态数据展示
<!--{iCMS:json url="/api/statistics.json" cache="true" time="600"}-->
<div class="statistics">
<h2>网站统计</h2>
<div class="stats-grid">
<div class="stat-item">
<h3>文章总数</h3>
<div class="value"><!--{$json.articles}--></div>
</div>
<div class="stat-item">
<h3>用户总数</h3>
<div class="value"><!--{$json.users}--></div>
</div>
<div class="stat-item">
<h3>评论总数</h3>
<div class="value"><!--{$json.comments}--></div>
</div>
<div class="stat-item">
<h3>今日访问</h3>
<div class="value"><!--{$json.today_visits}--></div>
</div>
</div>
</div>
注意事项
- URL与JSON参数:必须提供url或json参数中的一个,否则标签将返回false
- 缓存机制:启用缓存可以减少网络请求,提高性能
- 错误处理:JSON解析失败时会显示错误信息并返回空数组
- 安全性:从外部URL获取数据时,应确保来源可信
- 缓存时间:根据数据更新频率设置合适的缓存时间
高级用法
分页缓存
<!--{iCMS:json url="https://api.example.com/data?page=$page" cache="true" page="true" time="1800"}-->
<!-- 这将为每个页码创建单独的缓存 -->
条件缓存
<!--{if $need_fresh}-->
<!--{iCMS:json url="https://api.example.com/data" cache="false"}-->
<!--{else}-->
<!--{iCMS:json url="https://api.example.com/data" cache="true" time="3600"}-->
<!--{/if}-->
组合使用
<!--{iCMS:json url="https://api.example.com/products" cache="true"}-->
<!--{foreach key="key" value="product" from="$json.items"}-->
<div class="product">
<h3><!--{$product.name}--></h3>
<p>价格: ¥<!--{$product.price}--></p>
<!-- 获取每个产品的详细信息 -->
<!--{iCMS:json url="https://api.example.com/product/<!--{$product.id}-->" cache="true" time="7200"}-->
<div class="product-details">
<p>库存: <!--{$json.stock}--></p>
<div class="description"><!--{$json.description}--></div>
</div>
<!--{/iCMS}-->
</div>
<!--{/foreach}-->