如何确定字符串是否是有效的JSON?

时间:2009-07-27 10:59:23

标签: php json validation code-snippets jsonlint

有没有人知道PHP的强大(和防弹)is_JSON函数代码段?我(显然)有一种情况,我需要知道字符串是否是JSON。

嗯,也许通过JSONLint请求/响应来运行它,但这看起来有点矫枉过正。

6 个答案:

答案 0 :(得分:64)

如果您使用内置的json_decode PHP函数,json_last_error会返回上一个错误(例如,当您的字符串不是JSON时,JSON_ERROR_SYNTAX)。

通常json_decode会返回null

答案 1 :(得分:17)

使用json_decode怎么样?如果给定的字符串不是有效的JSON编码数据,它应该返回null

参见手册页上的示例3:

// the following strings are valid JavaScript but not valid JSON

// the name and value must be enclosed in double quotes
// single quotes are not valid 
$bad_json = "{ 'bar': 'baz' }";
json_decode($bad_json); // null

// the name must be enclosed in double quotes
$bad_json = '{ bar: "baz" }';
json_decode($bad_json); // null

// trailing commas are not allowed
$bad_json = '{ bar: "baz", }';
json_decode($bad_json); // null

答案 2 :(得分:16)

对于我的项目,我使用此功能(请阅读json_decode()文档中的" 注意"

传递你传递给json_decode()的相同参数,你可以检测特定的应用程序"错误" (例如深度错误)

PHP> = 5.6

// PHP >= 5.6
function is_JSON(...$args) {
    json_decode(...$args);
    return (json_last_error()===JSON_ERROR_NONE);
}

PHP> = 5.3

// PHP >= 5.3
function is_JSON() {
    call_user_func_array('json_decode',func_get_args());
    return (json_last_error()===JSON_ERROR_NONE);
}

用法示例:

$mystring = '{"param":"value"}';
if (is_JSON($mystring)) {
    echo "Valid JSON string";
} else {
    $error = json_last_error_msg();
    echo "Not valid JSON string ($error)";
}

答案 3 :(得分:4)

json_decode() json_last_error()不适合您吗?您是否正在寻找一种方法来说“看起来像JSON”还是实际验证它? json_decode()是在PHP中有效验证它的唯一方法。

答案 4 :(得分:3)

$this->post_data = json_decode( stripslashes( $post_data ) );
  if( $this->post_data === NULL )
   {
   die( '{"status":false,"msg":"The post_data parameter must be valid JSON"}' );
   }

答案 5 :(得分:1)

这是最好,最有效的方法

   @XmlType
   public class Mapusergroups extends PlanroomMigrationEntity implements
    java.io.Serializable {

private int idMapUserGroups;
private Users users;
private Groups groups;

public Mapusergroups() {
}

@Deprecated
public Mapusergroups(Users users, Groups groups) {
    this.users = users;
    this.groups = groups;
}

@XmlAttribute
public int getIdMapUserGroups() {
    return this.idMapUserGroups;
}

@XmlAttribute
@XmlID
public String getIdMapUserGroupsString() {
    return "" + this.idMapUserGroups;
}

public void setIdMapUserGroups(int idMapUserGroups) {
    this.idMapUserGroups = idMapUserGroups;
}

@XmlAttribute
@XmlIDREF
@PlanroomMigrationEntity.ReferenceToUser
public Users getUsers() {
    return this.users;
}

public void setUsers(Users users) {
    this.users = users;
}

@XmlAttribute
@XmlIDREF
@PlanroomMigrationEntity.PathUpToCompany
public Groups getGroups() {
    return this.groups;
}

public void setGroups(Groups groups) {
    this.groups = groups;
}

@Override
public BaseWrapper<?> getWrapper() {
    return new WMapUserGroups(this);
}

@Override
public PlanroomMigrationDAO getDao() {
    return new MapUserGroupsDAO();
}

@Override
public void attachReferences(JSONObject json, ObjectFinder finder)
        throws JSONException {
    this.users = json.has("userId") ? (Users) finder.lookup(Users.class,
            json.get("userId").toString()) : null;
    this.groups = json.has("groupId") ? (Groups) finder.lookup(
            Groups.class, json.get("groupId").toString()) : null;
}