需要があるかわからないけど、作ったので。
作ったよ!っていうのが大事かなって。
jsonToPhp.js
/**
* textJson に渡された文字列の JSON を PHP の Array に変換する
*
* @param {string} textJson
* @returns {string} PHP style array
*/
function jsonToPhpArray(textJson) {
var values = textJson.replace(/\r/g, '').split('\n').map(function (v) {
return v.trim();
});
var ary = [];
for (var i = 0; i < values.length; i++) {
var v = values[i];
if (v.indexOf('//') == 0) {
// コメントは飛ばす
continue;
}
ary.push(v);
}
var json = JSON.parse(ary.join(''));
return '$values = [' + _jsonToPhpArray(json) + '];';
}
/**
* Array 判定
*
* @param v
* @returns {boolean}
*/
function isArray(v) {
return Object.prototype.toString.call(v) === '[object Array]';
}
/**
* Object 判定
*
* @param v
* @returns {boolean}
*/
function isObject(v) {
return Object.prototype.toString.call(v) === '[object Object]';
}
/**
* @param {Object} json
* @returns {string}
* @private
*/
function _jsonToPhpArray(json) {
var ret = '';
var keys = Object.keys(json);
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var value = json[key];
if (isArray(value)) {
// 配列の場合
ret += '"' + key + '" => ' + _arrayToPhpArray(value) + ', ';
} else if (isObject(value)) {
// オブジェクトの場合
ret += '"' + key + '" => [' + _jsonToPhpArray(value) + '], ';
} else if (value == null) {
// null/undefined の場合
ret += _toPhpArrayStringWithKey(key, 'null', value);
} else if (typeof value === 'string') {
// 文字列の場合
ret += _toPhpArrayStringWithKey(key, 'string', value);
} else if (typeof value === 'number') {
// 数値の場合
ret += _toPhpArrayStringWithKey(key, 'number', value);
} else if (typeof value === 'boolean') {
// 真偽値の場合
ret += _toPhpArrayStringWithKey(key, 'boolean', value);
} else {
// それ以外は何もしない (Functionくらいか)
}
}
return ret;
}
/**
* @param {Array} array
* @returns {string}
* @private
*/
function _arrayToPhpArray(array) {
var ret = '[';
for (var i = 0; i < array.length; i++) {
var value = array[i];
if (isArray(value)) {
// 配列の場合
ret += _arrayToPhpArray(value);
} else if (isObject(value)) {
// オブジェクトの場合
ret += _jsonToPhpArray(value);
} else if (value == null) {
// null/undefined の場合
ret += _toPhpArrayString('null', value);
} else if (typeof value === 'string') {
// 文字列の場合
ret += _toPhpArrayString('string', value);
} else if (typeof value === 'number') {
// 数値の場合
ret += _toPhpArrayString('number', value);
} else if (typeof value === 'boolean') {
// 真偽値の場合
ret += _toPhpArrayString('boolean', value);
} else {
// それ以外は何もしない (Functionくらいか)
}
}
return ret + ']';
}
/**
* @param type
* @param value
* @returns {string}
* @private
*/
function _toPhpArrayString(type, value) {
var retStr;
if (type === 'null') {
retStr = 'null,';
} else if (type === 'string') {
retStr = '"' + value + '",';
} else {
retStr = value + ',';
}
return retStr;
}
/**
* @param key
* @param type
* @param value
* @returns {string}
* @private
*/
function _toPhpArrayStringWithKey(key, type, value) {
var retStr;
if (type === 'null') {
retStr = '"' + key + '" => null, ';
} else if (type === 'string') {
retStr = '"' + key + '" => "' + value + '", ';
} else {
retStr = '"' + key + '" => ' + value + ', ';
}
return retStr;
}