Jsonnet-PHP v1.3.0 发布,支持 PHP 7 使用 Jsonnet
JsonNet-PHP 是 Google Jsonnet 对 PHP的支持扩展.
pecl: http://pecl.php.net/package/jsonnet
github: https://github.com/Neeke/Jsonnet-PHP
gitee: https://gitee.com/neeke/Jsonnet-PHP
Change Log:
1.3.0
- Update Lib JsonNet use v0.10.0.
- Support PHP 7.
1.2.0
- Update Lib JsonNet use v0.9.5.
- Add function JsonNet::fmtFile.
- Add function JsonNet::fmtSnippet.
Google Jsonnet Tutorial
jsonnet语言,为我们最常使用的json对象赋予了新的生命力。使用jsonnet来描述json对象,可以在json对象中方便地使用变量\引用\循环等语法,甚至可以书写业务逻辑。
Install Jsonnet-PHP扩展
The pecl package is : http://pecl.php.net/package/jsonnet
pecl install jsonnet
Input (Jsonnet)
{
cocktails: {
// Ingredient quantities are in fluid ounces. "Tom Collins": {
ingredients: [
{ kind: "Farmers Gin", qty: 1.5 },
{ kind: "Lemon", qty: 1 },
{ kind: "Simple Syrup", qty: 0.5 },
{ kind: "Soda", qty: 2 },
{ kind: "Angostura", qty: "dash" },
],
garnish: "Maraschino Cherry",
served: "Tall",
},
Manhattan: {
ingredients: [
{ kind: "Rye", qty: 2.5 },
{ kind: "Sweet Red Vermouth", qty: 1 },
{ kind: "Angostura", qty: "dash" },
],
garnish: "Maraschino Cherry",
served: "Straight Up",
},
}
}
Output (JSON)
{
"cocktails": {
"Tom Collins": {
"ingredients": [
{ "kind": "Farmers Gin", "qty": 1.5 },
{ "kind": "Lemon", "qty": 1 },
{ "kind": "Simple Syrup", "qty": 0.5 },
{ "kind": "Soda", "qty": 2 },
{ "kind": "Angostura", "qty": "dash" }
],
"garnish": "Maraschino Cherry",
"served": "Tall" },
"Manhattan": {
"ingredients": [
{ "kind": "Rye", "qty": 2.5 },
{ "kind": "Sweet Red Vermouth", "qty": 1 },
{ "kind": "Angostura", "qty": "dash" }
],
"garnish": "Maraschino Cherry",
"served": "Straight Up" }
}
}
Demo of PHP
JsonNet::evaluateFile('bar_menu.1.jsonnet');
$Snippet = '
{
cocktails: {
// Ingredient quantities are in fluid ounces.
"Tom Collins": {
ingredients: [
{ kind: "Farmers Gin", qty: 1.5 },
{ kind: "Lemon", qty: 1 },
{ kind: "Simple Syrup", qty: 0.5 },
{ kind: "Soda", qty: 2 },
{ kind: "Angostura", qty: "dash" },
],
garnish: "Maraschino Cherry",
served: "Tall",
},
Manhattan: {
ingredients: [
{ kind: "Rye", qty: 2.5 },
{ kind: "Sweet Red Vermouth", qty: 1 },
{ kind: "Angostura", qty: "dash" },
],
garnish: "Maraschino Cherry",
served: "Straight Up",
},
}
}
';
var_dump(JsonNet::evaluateSnippet($Snippet));
PHP Re Result
/usr/local/php/php-7.0.6-zts-debug/bin/php --re jsonnet
Extension [ extension #40 JsonNet version v1.3.0 ] {
- Constants [2] {
Constant [ string JSONNET_PHP_VERSION ] { v1.3.0 }
Constant [ string JSONNET_PHP_AUTHOR ] { Chitao.Gao [ neeke@php.net ] }
}
- Functions {
Function [ function jsonnet_get_version ] {
}
Function [ function jsonnet_get_author ] {
}
}
- Classes [1] {
Class [ class JsonNet ] {
- Constants [0] {
}
- Static properties [0] {
}
- Static methods [4] {
Method [ static public method evaluateFile ] {
- Parameters [1] {
Parameter #0 [ $file_path ]
}
}
Method [ static public method evaluateSnippet ] {
- Parameters [1] {
Parameter #0 [ $snippet_string ]
}
}
Method [ static public method fmtFile ] {
- Parameters [1] {
Parameter #0 [ $file_path ]
}
}
Method [ static public method fmtSnippet ] {
- Parameters [1] {
Parameter #0 [ $snippet_string ]
}
}
}
- Properties [0] {
}
- Methods [2] {
Method [ <internal:jsonnet, ctor="">public method __construct ] {
}
Method [ <internal:jsonnet, dtor="">public method __destruct ] {
}
}
}
}
}
CodeTips
/**
* @author neeke@php.net
* Date: 18/3/29 下午7:51
*/
const JSONNET_PHP_VERSION = 'v1.3.0';
const JSONNET_PHP_AUTHOR = 'neeke@php.net';
const CODE_SUCCESS = 1000;
const CODE_ERROR = 900;
/**
* @return string
*/
function jsonnet_get_version()
{
return JSONNET_PHP_VERSION;
}
function jsonnet_get_author()
{
return JSONNET_PHP_AUTHOR;
}
class JsonNet
{
public function __construct()
{
#JsonNet init
}
public function __destruct()
{
#JsonNet destroy
}
/**
* @param $file_path
*
* @return array
* @throws Exception
*/
static public function evaluateFile($file_path)
{
throw new Exception('JsonNet::evaluateFile #error', CODE_ERROR);
return array();
}
/**
* @param $snippet_string
*
* @return array
* @throws Exception
*/
static public function evaluateSnippet($snippet_string)
{
throw new Exception('JsonNet::evaluateSnippet #error', CODE_ERROR);
return array();
}
/**
* @param $file_path
*
* @return array
* @throws Exception
*/
static public function fmtFile($file_path)
{
throw new Exception('JsonNet::fmtFile #error', CODE_ERROR);
return array();
}
/**
* @param $snippet_string
*
* @return array
* @throws Exception
*/
static public function fmtSnippet($snippet_string)
{
throw new Exception('JsonNet::fmtSnippet #error', CODE_ERROR);
return array();
}
}
(编辑:雷林鹏 来源:网络)
Jsonnet-PHP v1.3.0 发布,支持 PHP 7 使用 Jsonnet的更多相关文章
- 阿里云 Serverless 应用引擎(SAE)发布 v1.2.0,支持一键启停、NAS 存储、小规格实例等实用特性
近日,阿里云 Serverless 应用引擎(SAE)发布 v1.2.0版本,新版本实现了以下新功能/新特性: 一键启停开发测试环境:企业开发测试环境一般晚上不常用,长期保有应用实例,闲置浪费很高.使 ...
- yoyogo v1.7.4 发布,支持 grpc v1.3.8 & etcd 3.5.0
YoyoGo (Go语言框架)一个简单.轻量.快速.基于依赖注入的微服务框架( web .grpc ),支持Nacos/Consoul/Etcd/Eureka/k8s /Apollo等 . https ...
- FineUIMvc v1.4.0 发布了(ASP.NET MVC控件库)!
FineUIMvc v1.4.0 已经于 2017-06-30 发布,FineUIMvc 是基于 jQuery 的专业 ASP.NET MVC 控件库,是我们的新产品.由于和 FineUI(专业版)共 ...
- Visual Studio Code 1.0发布,支持中文在内9种语言
Visual Studio Code 1.0发布,支持中文在内的9种语言:Simplified Chinese, Traditional Chinese, French, German, Italia ...
- RapidJSON v1.1.0 发布简介
时隔 15.6 个月,终于发布了一个新版本 v1.1.0. 新版本除了包含了这些日子收集到的无数的小改进及 bug fixes,也有一些新功能.本文尝试从使用者的角度,简单介绍一下这些功能和沿由. P ...
- YoyoGo v1.7.2 发布, 支持 Nacos & Apollo 配置中心
YoyoGo (Go语言框架)一个简单.轻量.快速.基于依赖注入的微服务框架( web .grpc ),支持Nacos/Consoul/Etcd/Eureka/k8s /Apollo等 . https ...
- 项目实战:Qt文件改名工具 v1.2.0(支持递归检索,搜索:模糊匹配,前缀匹配,后缀匹配;重命名:模糊替换,前缀追加,后缀追加)
需求 在整理文件和一些其他头文件的时候,需要对其名称进行整理和修改,此工具很早就应该写了,创业后,非常忙,今天抽空写了一个顺便提供给学习. 工具和源码下载地址 本篇文章的应用包和源码包可在 ...
- AgileConfig 1.6.0 发布 - 支持服务注册与发现
大家好,好久没有输出博文了,一是因为比较忙,另外一个原因是最近主要的精力是在给 AgileConfig 添加一个新的功能:服务注册与发现. 先说说为什么会添加这个功能.我自己的项目是用 Consul ...
- Yearning v1.3.0 发布,Web 端 SQL 审核平台
企业级MYSQL web端 SQL审核平台. Website 官网 www.yearning.io Feature 功能 数据库字典自动生成 SQL查询 查询工单 导出 自动补全,智能提示 查询语句审 ...
随机推荐
- php的soap无故出错的真凶:wsdl缓存
soap不更新的真凶: 当我修改了服务端的调用方法后,更新了wsdl,客户端的参数老是丢失(不是全丢失,而是部分),让人很郁闷. 第二天我索性增加了一个服务端的新方法,更新了wsdl,但是客户端请求却 ...
- 网页中Cache各字段含义
Pragma 当该字段值为"no-cache"的时候(事实上现在RFC中也仅标明该可选值),会知会客户端不要对该资源读缓存,即每次都得向服务器发一次请求才行. Expires 有了 ...
- MySQL协议分析(1)
MySQL协议分析 此阶段的协议分析是在未压缩未加密情况下的协议分析 思路: 结合Oracle官网和自己用wireshark抓的网络数据包进行协议分析 官网说明 mysql包共分为4段,格式如下: 第 ...
- Java游戏服务器成长之路——弱联网游戏篇(源码分析)
前言 前段时间由于公司的一款弱联网游戏急着上线,没能及时分享,现在基本做的差不多,剩下的就是测试阶段了(本来说元旦来分享一下服务器技术的).公司的这款游戏已经上线一年多了,在我来之前一直都是单机版本, ...
- C# comport 打印图像
public string GetLogo() { string logo = ""; if (!File.Exists(@"C:\bitmap.bmp")) ...
- IOS系统推送原理
IOS推送大致原理如下图 1.Provider:就是为指定IOS设备应用程序提供Push的服务器,(如果IOS设备的应用程序是客户端的话,那么Provider可以理解为服务端[消息的发起者]): 2. ...
- 跨域问题-jsonp
前端同源策略并不会拦截静态资源请求,那么就将接口伪装成资源,然后后端配合返回一个前端预定义的方法调用,将返回值放入调用该函数的形参即可 <!DOCTYPE html> <html l ...
- 3.1.7. Cross validation of time series data
3.1.7. Cross validation of time series data Time series data is characterised by the correlation bet ...
- oracle 分区表详解
一.分区表的概述: Oracle的表分区功能通过改善可管理性.性能和可用性,从而为各式应用程序带来了极大的好处.通常,分区可以使某些查询以及维护操作的性能大大提高.此外,分区还可以极大简化常见的管理任 ...
- Apache httpd服务部署
1. yum安装 yum install httpd yum install httpd-devel yum install httpd-manual 2. 配置 vim /etc/httpd/con ...