天道酬勤,学无止境

检查字符串是否在 json 对象中(Check if a string is in a json object)

问题

我正在尝试使用 javascript 检查字符串是否在 JSON 对象中。 我不知道这是否可能,或者我必须转换一些东西。 这是带有 if 语句的代码部分,我想在其中检查 data.userName(字符串)是否在用户(JSON 对象)中

function validation() {
    var userName_login = document.getElementById("username").value;
    var password_login = document.getElementById("password").value;
    var data = {
        userName: userName_login,
        password: password_login
    };
    doJSONRequest("GET", "/users/", null, data, function(users) {
        if (data.userName) {

        }
    })
}

而 doJSONRequest 函数是:

function doJSONRequest(method, url, headers, data, callback) {
    if (arguments.length != 5) {
        throw new Error('Illegal argument count');
    }
    doRequestChecks(method, true, data);
    var r = new XMLHttpRequest();
    r.open(method, url, true);
    doRequestSetHeaders(r, method, headers);
    r.onreadystatechange = function() {
        if (r.readyState != 4 || (r.status != 200 && r.status != 201 && r.status != 204)) {
            return;
        } else {
            if (isJSON(r.responseText))
                callback(JSON.parse(r.responseText));
            else
                callback();
        }
    };
    var dataToSend = null;
    if (!("undefined" == typeof data) && !(data === null))
        dataToSend = JSON.stringify(data);
    r.send(dataToSend);
}
回答1
function checkForValue(json, value) {
    for (key in json) {
        if (typeof (json[key]) === "object") {
            return checkForValue(json[key], value);
        } else if (json[key] === value) {
            return true;
        }
    }
    return false;
}

检查 Json 字符串在 JS 中是否有值

回答2

尝试使用JSON.parse解析它,如果解析成功则返回true否则返回false

function isJSON(str) {
    try { 
      JSON.parse(str);
    } catch (e) {
      return false;
    }
    return true;
}
标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何检查 JSON 字符串在 JavaScript 中是否有值?(How to check if a JSON string has a value in JavaScript?)
    问题 有没有办法检查json字符串是否具有值(字符或字符串)? 这是示例: { "firstName": "John", "lastName": "Smith", "age": 25, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": 10021 } } 我必须检查这个json是否有“m”。 它必须知道“m”存在于一个值中。 回答1 使用这个方法,如果你有json字符串,你可以使用json = $.parseJSON(jsonStr)来解析—— function checkForValue(json, value) { for (key in json) { if (typeof (json[key]) === "object") { return checkForValue(json[key], value); } else if (json[key] === value) { return true; } } return false; } 回答2 假设将 JSON 对象分配给 var 用户 if(JSON.stringify(user).indexOf('m') > -1){ } 抱歉,在阅读新评论时,我发现您只想查看字符串是否仅在键中
  • 如何在不使用Try / Catch的情况下检查字符串在JavaScript中是否为有效的JSON字符串(How to check if a string is a valid JSON string in JavaScript without using Try/Catch)
    问题 就像是: var jsonString = '{ "Id": 1, "Name": "Coke" }'; //should be true IsJsonString(jsonString); //should be false IsJsonString("foo"); IsJsonString("<div>foo</div>") 解决方案不应包含try / catch。 我们中的一些人打开“打破所有错误”,他们不喜欢调试器打破那些无效的JSON字符串。 回答1 首先发表评论。 问题是关于不使用try/catch 。 如果您不介意使用它,请阅读以下答案。 在这里,我们仅使用正则表达式检查JSON字符串,它在大多数情况下(并非在所有情况下)都适用。 看看https://github.com/douglascrockford/JSON-js/blob/master/json2.js中的450行 有一个正则表达式,用于检查有效的JSON,例如: if (/^[\],:{}\s]*$/.test(text.replace(/\\["\\\/bfnrtu]/g, '@'). replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'). replace(/(?:^|:|,)(?:\s*\[
  • 如何检查值是否为json对象?(How can I check if a value is a json object?)
    问题 我的服务器端代码返回一个值,该值成功时为json对象,失败时为字符串'false'。 现在如何检查返回的值是否为json对象? 回答1 如果字符串是JSON,则jQuery.parseJSON()应该返回类型为“对象”的对象,因此您只需使用typeof检查类型 var response=jQuery.parseJSON('response from server'); if(typeof response =='object') { // It is JSON } else { if(response ===false) { // the response was a string "false", parseJSON will convert it to boolean false } else { // the response was something else } } 回答2 所选的解决方案实际上不适用于我,因为我得到了 "Unexpected Token <" Chrome中的错误。 这是因为一旦遇到解析和未知字符,就会引发错误。 但是,如果您仅通过ajax返回字符串值,则有一种解决方法(如果您使用PHP或ASPX处理ajax请求,并且根据条件可能会或可能不会返回JSON时,这将非常有用) 解决方案非常简单,您可以执行以下操作以检查其是否为有效的JSON返回值
  • 如何检查JavaScript对象是否为JSON(How to check if JavaScript object is JSON)
    问题 我有一个需要循环浏览的嵌套JSON对象,每个键的值可以是String,JSON数组或另一个JSON对象。 根据对象的类型,我需要执行不同的操作。 有什么方法可以检查对象的类型以查看它是String,JSON对象还是JSON数组? 我尝试使用typeof和instanceof但两者似乎都不起作用,因为typeof会同时为JSON对象和数组返回一个对象,而当我对obj instanceof JSON操作时, instanceof给出了错误。 更具体地说,在将JSON解析为JS对象之后,有什么方法可以检查它是否是普通字符串,或者是具有键和值的对象(来自JSON对象),还是数组(来自JSON数组) )? 例如: JSON格式 var data = "{'hi': {'hello': ['hi1','hi2'] }, 'hey':'words' }"; 示例JavaScript var jsonObj = JSON.parse(data); var path = ["hi","hello"]; function check(jsonObj, path) { var parent = jsonObj; for (var i = 0; i < path.length-1; i++) { var key = path[i]; if (parent != undefined) { parent
  • 在PHP中检查字符串是否为JSON的最快方法?(Fastest way to check if a string is JSON in PHP?)
    问题 我需要一种非常非常快速的方法来检查字符串是否为JSON。 我觉得这不是最好的方法: function isJson($string) { return ((is_string($string) && (is_object(json_decode($string)) || is_array(json_decode($string))))) ? true : false; } 是否有任何性能发烧友想要改进此方法? 回答1 function isJson($string) { json_decode($string); return (json_last_error() == JSON_ERROR_NONE); } 回答2 回答问题 函数json_last_error返回在JSON编码和解码期间发生的最后一个错误。 因此,检查有效JSON的最快方法是 // decode the JSON data // set second parameter boolean TRUE for associative array output. $result = json_decode($json); if (json_last_error() === JSON_ERROR_NONE) { // JSON is valid } // OR this is equivalent if (json
  • 如何测试一个空的JavaScript对象?(How do I test for an empty JavaScript object?)
    问题 在AJAX请求之后,有时我的应用程序可能会返回一个空对象,例如: var a = {}; 如何检查情况呢? 回答1 ECMA 5+: // because Object.keys(new Date()).length === 0; // we have to do some additional check obj // 👈 null and undefined check && Object.keys(obj).length === 0 && obj.constructor === Object 但是请注意,这会创建一个不必要的数组( keys的返回值)。 ECMA 5之前的版本: function isEmpty(obj) { for(var prop in obj) { if(obj.hasOwnProperty(prop)) { return false; } } return JSON.stringify(obj) === JSON.stringify({}); } jQuery的: jQuery.isEmptyObject({}); // true lodash: _.isEmpty({}); // true 下划线: _.isEmpty({}); // true 角度 Hoek.deepEqual({}, {}); // true ExtJS Ext
  • 如何确定两个JavaScript对象的相等性?(How to determine equality for two JavaScript objects?)
    问题 严格的相等运算符将告诉您两个对象类型是否相等。 但是,有没有办法判断两个对象是否相等,就像Java中的哈希码值一样? 堆栈溢出问题JavaScript中是否存在某种hashCode函数? 与这个问题类似,但需要更多的学术答案。 上面的场景演示了为什么必须要有一个,而我想知道是否有任何等效的解决方案。 回答1 简短的答案 简单的答案是:不,就您的意思而言,没有通用的方法可以确定一个对象与另一个对象相等。 例外是,当您严格考虑对象是无类型的时。 长答案 该概念是Equals方法的概念,该方法比较对象的两个不同实例以指示它们在值级别上是否相等。 但是,由特定类型决定如何实现Equals方法。 具有原始值的属性的迭代比较可能不够,可能存在一些不被视为对象值一部分的属性。 例如, function MyClass(a, b) { var c; this.getCLazy = function() { if (c === undefined) c = a * b // imagine * is really expensive return c; } } 在上述情况下, c对于确定MyClass的任何两个实例是否相等并不十分重要,只有a和b是重要的。 在某些情况下, c在各个实例之间可能有所不同,但在比较过程中并不重要。 请注意,当成员本身也可能是类型的实例
  • 检查对象是否已定义,最佳实践。(Check if a object is defined, best practice.)
    问题 我有来自 ajax 请求的以下 JSON 响应。 var json = { "response": { "freeOfChargeProduct": { "description": "Product", "orderQty": 5, "productName": "XYZ", "qty": 6, "details": { "price": 55.5, "instock": "true", "focQuantity": 1 } }, "orderLineId": 4788, "totalOrderLinePrice": "741.36", "totalOrderPrice": "1,314.92", "totalQty": 17 }; JSON 并不总是返回“freeOfChargeProduct”属性。 因此,如果我想获得“freeOfChargeProduct”价格,那么我必须执行以下操作: var getFreeOfChargeProductPrice = function() { var r = json.response; if (r && r.freeOfChargeProduct && r.freeOfChargeProduct.details) { return r.freeOfChargeProduct.details.price; } return
  • 如何检查两个 JSON 对象是否相等?(How do I check two JSON objects are equal?)
    问题 我试图发现两个 JSON 字符串是否相等。 这是我以前尝试过的 var obj1 = Json.Decode("{\"ValueA\":1,\"ValueB\":2}") var obj2 = Json.Decode("{\"ValueB\":2,\"ValueA\":1}") // But then there seems to be no way to compare the two objects? 当然,必须存在一种优雅简单的方法来完成我认为的常见任务? 回答1 比较 json 的另一种方法 - 将 JSON 与 JToken.DeepEquals 进行比较 JObject o1 = new JObject { { "Integer", 12345 }, { "String", "A string" }, { "Items", new JArray(1, 2) } }; JObject o2 = new JObject { { "Integer", 12345 }, { "String", "A string" }, { "Items", new JArray(1, 2) } }; Console.WriteLine(JToken.DeepEquals(o1, o2)); 回答2 您可以使用比较 .NET 对象库来检查两个对象实例是否相等。 它知道如何比较列表、字典等
  • 如何检查数组是否在JavaScript中包含值?(How do I check if an array includes a value in JavaScript?)
    问题 找出JavaScript数组是否包含值的最简洁,最有效的方法是什么? 这是我知道的唯一方法: function contains(a, obj) { for (var i = 0; i < a.length; i++) { if (a[i] === obj) { return true; } } return false; } 有没有更好,更简洁的方法来实现这一目标? 回答1 现代的浏览器阵列#包括,这正是这么做的,并通过大家除了IE的广泛支持: console.log(['joe', 'jane', 'mary'].includes('jane')); //true 您还可以使用Array#indexOf,它不太直接,但对于过时的浏览器不需要polyfill。 console.log(['joe', 'jane', 'mary'].indexOf('jane') >= 0); //true 许多框架还提供类似的方法: jQuery:$ .inArray(value,array,[fromIndex]) Underscore.js:_.contains(array,value)(也别名为_.include和_.includes ) Dojo工具包:dojo.indexOf(array,value,[fromIndex,findLast]) 原型:array.indexOf
  • 检查特定的 JSON 对象是否可用(Check if a particular JSON Object is available or not)
    问题 我有如下 JSON 文件,必须将其转储到 ArrayList 中: { "main1" : [ { "child1" : valueA, "child2" : valueB, "child3" : valueC, }, { "child1" : value1, "child3" : value3, }, ], "main2" : "valueMain2" } 必须检查元素child2是否存在,然后取值。 您可以看到它没有出现在第二个数组中。 我正在使用本机 JSON (org.JSON) Java 代码如下: ArrayList<HashMap<String,String>> myList = new ArrayList<HashMap<String,String>>(); JSONObject json = <my_json_object>; JSONObject getchild2; JSONArray jArray = <my_json_object>.getJSONArray("main1"); for(int j = 0; j < jArray.length(), j++){ HashMap<String,String> map = new HashMap<String,String>(); map.put("First Value", jArray
  • 如何在Java中检查给定的字符串是否为有效的JSON(How to check whether a given string is valid JSON in Java)
    问题 如何验证Java中的JSON字符串? 还是可以使用正则表达式解析它? 回答1 一个疯狂的主意,尝试解析它并捕获异常: import org.json.*; public boolean isJSONValid(String test) { try { new JSONObject(test); } catch (JSONException ex) { // edited, to include @Arthur's comment // e.g. in case JSONArray is valid as well... try { new JSONArray(test); } catch (JSONException ex1) { return false; } } return true; } 这段代码使用了org.json JSON API实现,该实现在github,maven和部分Android上可用。 回答2 杰克逊图书馆 一种选择是使用Jackson库。 首先导入最新版本(现在是): <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.7.0</version> </dependency> 然后
  • 使用Typescript进行接口类型检查(Interface type check with Typescript)
    问题 这个问题是使用TypeScript进行类类型检查的直接类比 我需要在运行时找出类型为any的变量是否实现了接口。 这是我的代码: interface A{ member:string; } var a:any={member:"foobar"}; if(a instanceof A) alert(a.member); 如果在打字机游乐场输入此代码,则最后一行将被标记为错误,“名称A在当前作用域中不存在”。 但这不是事实,该名称确实存在于当前作用域中。 我什至可以将变量声明更改为var a:A={member:"foobar"}; 没有编辑的投诉。 浏览完网络并在SO上找到另一个问题后,我将接口更改为一个类,但是后来我无法使用对象文字来创建实例。 我想知道类型A如何会像这样消失,但是查看生成的javascript可以解释问题: var a = { member: "foobar" }; if(a instanceof A) { alert(a.member); } 没有将A表示为接口,因此无法进行运行时类型检查。 我知道javascript作为一种动态语言没有接口的概念。 有什么方法可以对接口进行类型检查吗? 打字稿操场的自动完成显示,打字稿甚至提供了一种方法implements 。 我该如何使用? 回答1
  • 如何检查json键是否存在?(How to check if a json key exists?)
    问题 因此,我从服务器获取了一些JSON值,但是我不知道是否会有特定的字段。 像这样: { "regatta_name":"ProbaRegatta", "country":"Congo", "status":"invited" } 有时,还会有一个额外的字段,例如: { "regatta_name":"ProbaRegatta", "country":"Congo", "status":"invited", "club":"somevalue" } 我想检查名为“ club”的字段是否存在,以便在解析时不会得到org.json.JSONException:club的值 回答1 JSONObject类具有一个名为“ has”的方法: http://developer.android.com/reference/org/json/JSONObject.html#has(java.lang.String) 如果此对象具有名称映射,则返回true。 映射可以为NULL。 回答2 您可以在“ HAS”处进行这种检查-如果此对象具有名称映射,则返回true。 映射可以为NULL。 if (json.has("status")) { String status = json.getString("status")); } if (json.has("club")) { String club
  • 检查对象是否在运行时使用TypeScript实现接口(Check if an object implements an interface at runtime with TypeScript)
    问题 我在运行时加载JSON配置文件,并使用接口定义其预期结构: interface EngineConfig { pathplanner?: PathPlannerConfig; debug?: DebugConfig; ... } interface PathPlannerConfig { nbMaxIter?: number; nbIterPerChunk?: number; heuristic?: string; } interface DebugConfig { logLevel?: number; } ... 由于可以使用自动填充等功能,因此可以方便地访问各种属性。 问题:有没有一种方法可以使用此声明来检查我加载的文件的正确性? 即我没有意外的属性? 回答1 有一种“方法”,但是您必须自己实现。 它被称为“用户定义的类型防护”,它看起来像这样: interface Test { prop: number; } function isTest(arg: any): arg is Test { return arg && arg.prop && typeof(arg.prop) == 'number'; } 当然, isTest函数的实际实现完全取决于您,但是好的isTest是它是一个实际函数,这意味着它是可测试的。 现在,在运行时,您将使用isTest(
  • 在运行时检查字符串文字联合类型的有效性?(Checking validity of string literal union type at runtime?)
    问题 我有一个简单的字符串文字联合类型,由于FFI调用了“普通” Javascript,因此需要检查其有效性。 有没有办法确保某个变量在运行时是这些文字字符串中任何一个的实例? 遵循以下原则 type MyStrings = "A" | "B" | "C"; MyStrings.isAssignable("A"); // true MyStrings.isAssignable("D"); // false 回答1 如果您希望在运行时检查程序中的多个字符串联合定义,则可以使用通用的StringUnion函数一起生成其静态类型和类型检查方法。 通用支持功能 // TypeScript will infer a string union type from the literal values passed to // this function. Without `extends string`, it would instead generalize them // to the common string type. export const StringUnion = <UnionType extends string>(...values: UnionType[]) => { Object.freeze(values); const valueSet: Set<string>
  • 如何在 AngularJS 视图中检查空对象(How to check for an empty object in an AngularJS view)
    问题 在控制器的范围内,我有类似的东西: $scope.card = {}; 在视图中,我必须检查我的对象是否仍然是空文字{} ,或者它是否在某些字段中包含一些数据。 我试过这个: ng-show="angular.equals({}, card)" 和 ng-show="!angular.equals({}, card)" 但它没有用。 有没有更好的方法? 如何检查对象是否为空或是否包含某些字段? 回答1 您可以使用: Object.keys(card).length === 0 但是请确保从控制器的方法中使用它,因为Object在视图中不可用,例如: $scope.isObjectEmpty = function(card){ return Object.keys(card).length === 0; } 然后您可以从视图中调用该函数: ng-show="!isObjectEmpty(card)" 回答2 使用json过滤器并与'{}'字符串进行比较。 <div> My object is {{ (myObject | json) == '{}' ? 'Empty' : 'Not Empty' }} </div> ng-show示例: <div ng-show="(myObject | json) != '{}'"></div> 回答3 创建一个函数来检查对象是否为空:
  • 如何显示JavaScript对象?(How can I display a JavaScript object?)
    问题 如何像alert变量一样以字符串格式显示JavaScript对象的内容? 我想显示对象的格式相同。 回答1 如果要出于调试目的打印对象,请使用以下代码: var obj = {prop1: 'prop1Value', prop2: 'prop2Value', child: {childProp1: 'childProp1Value'}} console.log(obj) 将显示: 注意:您只能记录该对象。 例如,这将不起作用: console.log('My object : ' + obj) 注意' :您还可以在log方法中使用逗号,然后输出的第一行将是字符串,然后将呈现该对象: console.log('My object: ', obj); 回答2 使用本机JSON.stringify方法。 可与嵌套对象一起使用,并且所有主要的浏览器都支持此方法。 str = JSON.stringify(obj); str = JSON.stringify(obj, null, 4); // (Optional) beautiful indented output. console.log(str); // Logs output to dev tools console. alert(str); // Displays output using window.alert()
  • Gson可选和必填字段(Gson optional and required fields)
    问题 一个人应该如何处理Gson以及必填字段和可选字段? 由于所有字段都是可选的,因此我无法根据响应json是否包含某些密钥来使网络请求真正失败, Gson会将其解析为null。 方法我正在使用gson.fromJson(json, mClassOfT); 例如,如果我有以下json: {"user_id":128591, "user_name":"TestUser"} 而我的班级: public class User { @SerializedName("user_id") private String mId; @SerializedName("user_name") private String mName; public String getId() { return mId; } public void setId(String id) { mId = id; } public String getName() { return mName; } public void setName(String name) { mName = name; } } 如果json不包含user_id或user_name密钥,是否有使Gson失败的任何选项? 在许多情况下,您可能至少需要解析一些值,而其他值是可选的? 是否有任何模式或库可用于全局处理这种情况? 谢谢。 回答1 如您所述
  • Java null检查为什么使用==代替.equals()(Java null check why use == instead of .equals())
    问题 在Java中,我被告知在执行null检查时应使用==而不是.equals()。 是什么原因呢? 回答1 他们是两回完全不同的事情。 ==比较变量包含的对象引用(如果有)。 .equals()根据两个对象的约定检查两个对象是否相等。 根据它们的契约,两个不同的对象实例完全可能是“相等的”。 还有一个小细节,因为equals是一种方法,所以如果您尝试在null引用上调用它,则会得到NullPointerException 。 例如: class Foo { private int data; Foo(int d) { this.data = d; } @Override public boolean equals(Object other) { if (other == null || other.getClass() != this.getClass()) { return false; } return ((Foo)other).data == this.data; } /* In a real class, you'd override `hashCode` here as well */ } Foo f1 = new Foo(5); Foo f2 = new Foo(5); System.out.println(f1 == f2); // outputs false