使用javascript从值获取特定文本

时间:2014-09-10 12:48:17

标签: javascript json

我有一个像这样的json.json文件

{
"name1":"ts1=Hallo&ts2=Hillarry&ts3=Sting&ts4=Storm",
"name2":"st1=Hallo2&st2=Hillarry2&st3=Sting2&st4=Storm2",
"name3":"dr1=Hallo3&dr2=Hillarry3&dr3=Sting3&dr4=Storm3",
"name4":"ds1=Hallo4&ds2=Hillarry4&ds3=Sting4&ds4=Storm4"
}

这个脚本我用来读取文件

<script type='text/javascript'>
$(window).load(function(){
$.getJSON("json.json", function(person){
    document.write(person.name3);
});
});
</script>

此脚本用于指出来自&#34; name3&#34;的所有数据。但我只需要&#34; dr3&#34;来自&#34; name3&#34;的价值存储以便写入。

怎么做?

6 个答案:

答案 0 :(得分:1)

您可以使用split()来电的组合来存储。

var dr3val = person.name3.split("&")[2].split("=")[1];
console.log(dr3val); // "Sting3"

如果订单相同,以上内容将有效。否则你可以使用下面的

var dr3val = person.name3.replace(/.*?dr3=(.+)?&.*/,"$1");
console.log(dr3val); // "Sting3"

答案 1 :(得分:0)

您应该将您的json更改为:

{
"name1":
     {
        "ts1" : "Hallo",
        "ts2" : "Hillarry", 
        "ts3" : "Sting",
        "ts4" : "Storm"
    }
}

这样可以让你的jsonstring更容易使用。

从中获取数据:

person.name1.ts1

答案 2 :(得分:0)

 var json = {
            "name1":"ts1=Hallo&ts2=Hillarry&ts3=Sting&ts4=Storm",
            "name2":"st1=Hallo2&st2=Hillarry2&st3=Sting2&st4=Storm2",
            "name3":"dr1=Hallo3&dr2=Hillarry3&dr3=Sting3&dr4=Storm3",
            "name4":"ds1=Hallo4&ds2=Hillarry4&ds3=Sting4&ds4=Storm4"
        };

        var name3 = json.name3.split('&');
        for (var i = 0; i < name3.length; i++) {
            if (name3[i].indexOf("dr3=") > -1) {
                var value = name3[i].replace("dr3=", "");
                alert(value);
            }
        }

答案 3 :(得分:0)

实现这个我为之前必须解决的类似案例制作的jQuery插件。这个插件的好处是它处理多个发生的变量并将它们收集在一个数组中,模拟一个webserver行为。

<script type='text/javascript'>
(function($) {
    $.StringParams = function(string) {
        if (string == "") return {};
        var result = {},
            matches = string.split('&');
        for(var i = 0, pair, key, value; i < matches.length; i++) {
            pair = matches[i].split('=');
            key = pair[0];
            if(pair.length == 2) {
                value = decodeURIComponent(pair[1].replace(/\+/g, " "));
            } else {
                value = null;
            }
            switch($.type(result[key])) {
                case 'undefined':
                    result[key] = value;
                    break;
                case 'array':
                    result[key].push(value);
                    break;
                default:
                    result[key] = [result[key], value];
            }
        }
        return result;
    }
})(jQuery);
</script>

然后在你的代码中执行:

<script type='text/javascript'>
$(window).load(function(){
    var attributes3;
    $.getJSON("json.json", function(person){
        attributes3 = $.StringParams(person.name3)
        console.log(attributes3.dr3);
    });
});
</script>

答案 4 :(得分:0)

下划线解决方案:

_.map(json, function(query) {         //map the value of each property in json object
    return _.object(                  //to an object created from array
        query.split('&')              //resulting from splitting the query at & 
        .map(function(keyval) {       //and turning each of the key=value parts
            return keyval.split('='); //into a 2-element array split at the equals.
    );
})

query.split...部分的结果是

[ [ 'ts1', 'Hallo'], ['ts2', 'Hillarry'], ... ]

下划线的_.object功能将其转换为

{ ts1: 'Hallo', ts2: 'Hillarry', ... }

最终结果是

{
    name1: { ts1: 'hHallo', ts2: 'Hillarry, ...},
    name2: { ...
}

现在可以使用object.name3.dr3获得结果。

避免下划线

但是,如果您讨厌下划线或者不想使用它,那么它对_.map_.object所做的事情并不难复制,并且可能很有用学习锻炼。两者都使用有用的Array#reduce函数。

function object_map(object, fn) {
    return Object.keys(object).reduce(function(result, key) {
        result[key] = fn(object[key]);
        return result;
    }, {});
}

function object_from_keyvals(keyvals) {
    return keyvals.reduce(function(result, v) {
        result[v[0]] = v[1];
        return result;
    }, {});
}

答案 5 :(得分:0)

var person={
    "name1":"ts1=Hallo&ts2=Hillarry&ts3=Sting&ts4=Storm",
    "name2":"st1=Hallo2&st2=Hillarry2&st3=Sting2&st4=Storm2",
    "name3":"dr1=Hallo3&dr2=Hillarry3&dr3=Sting3&dr4=Storm3",
    "name4":"ds1=Hallo4&ds2=Hillarry4&ds3=Sting4&ds4=Storm4"
}     
var pN = person.name3;   
var toSearch = 'dr3';    
var ar = pN.split('&');    
var result = '';    
for(var i=0; i< ar.length; i++) 
  if(ar[i].indexOf(toSearch) >= 0 ) 
     result=ar[i].split('=')[1];
console.log('result=='+result);