C#语言,从百度地图反向地理编码api返回的json数据中提取信息

C#语言,从百度地图反向地理编码api返回的json数据中提取信息,第1张

安装jsonnet控件,并using NewtonsoftJsonLinq;

这样就可以获取想要的tag对应的内容了。

string text = "renderReverse&&renderReverse({\"status\":0,\"result\":{\"location\":{\"lng\":11632298703399,\"lat\":39983424051248},\"formatted_address\":\"北京市海淀区中关村大街27号1101-08室\",\"business\":\"中关村,人民大学,苏州街\",\"addressComponent\":{\"city\":\"北京市\",\"country\":\"中国\",\"direction\":\"附近\",\"distance\":\"7\",\"district\":\"海淀区\",\"province\":\"北京市\",\"street\":\"中关村大街\",\"street_number\":\"27号1101-08室\",\"country_code\":0},\"pois\":[{\"addr\":\"北京北京海淀海淀区中关村大街27号(地铁海淀黄庄站A1\",\"cp\":\"NavInfo\",\"direction\":\"内\",\"distance\":\"0\",\"name\":\"北京远景国际公寓(中关村店)\",\"poiType\":\"房地产\",\"point\":{\"x\":1163229458916,\"y\":39983610361549},\"tag\":\"房地产\",\"tel\":\"\",\"uid\":\"35a08504cb51b1138733049d\",\"zip\":\"\"},{\"addr\":\"海淀区中关村北大街27号\",\"cp\":\"NavInfo\",\"direction\":\"附近\",\"distance\":\"25\",\"name\":\"中关村大厦\",\"poiType\":\"房地产\",\"point\":{\"x\":11632285606105,\"y\":39983568897877},\"tag\":\"房地产;写字楼\",\"tel\":\"\",\"uid\":\"06d2dffdaef1b7ef88f15d04\",\"zip\":\"\"},{\"addr\":\"中关村大街29\",\"cp\":\"NavInfo\",\"direction\":\"北\",\"distance\":\"62\",\"name\":\"海淀医院激光整形美容部\",\"poiType\":\"医疗\",\"point\":{\"x\":11632317046798,\"y\":39983016046485},\"tag\":\"医疗;专科医院\",\"tel\":\"\",\"uid\":\"b1c556e81f27cb71b4265502\",\"zip\":\"\"},{\"addr\":\"中关村大街27号中关村大厦1层\",\"cp\":\"NavInfo\",\"direction\":\"附近\",\"distance\":\"1\",\"name\":\"中国人民财产保险中关村营业部\",\"poiType\":\"金融\",\"point\":{\"x\":11632298182382,\"y\":39983416864194},\"tag\":\"金融;投资理财\",\"tel\":\"\",\"uid\":\"060f5e53137d20d7081cc779\",\"zip\":\"\"},{\"addr\":\"北京市海淀区\",\"cp\":\"NavInfo\",\"direction\":\"东北\",\"distance\":\"58\",\"name\":\"北京市海淀医院-输血科\",\"poiType\":\"医疗\",\"point\":{\"x\":116322685383,\"y\":39983092063819},\"tag\":\"医疗;其他\",\"tel\":\"\",\"uid\":\"cf405905b6d82eb9b55f1e89\",\"zip\":\"\"},{\"addr\":\"北京市海淀区中关村大街27号中关村大厦二层\",\"cp\":\"NavInfo\",\"direction\":\"附近\",\"distance\":\"0\",\"name\":\"眉州东坡酒楼(中关村店)\",\"poiType\":\"美食\",\"point\":{\"x\":11632298182382,\"y\":39983423774823},\"tag\":\"美食\",\"tel\":\"\",\"uid\":\"2c0bd6c57dbdd3b342ab9a8c\",\"zip\":\"\"},{\"addr\":\"北京市海淀区中关村大街29号(海淀黄庄路口)\",\"cp\":\"NavInfo\",\"direction\":\"东北\",\"distance\":\"223\",\"name\":\"海淀医院\",\"poiType\":\"医疗\",\"point\":{\"x\":11632199368776,\"y\":39982083099537},\"tag\":\"医疗;综合医院\",\"tel\":\"\",\"uid\":\"fa01e9371a040053774ff1ca\",\"zip\":\"\"},{\"addr\":\"北京市海淀区中关村大街28号\",\"cp\":\"NavInfo\",\"direction\":\"西北\",\"distance\":\"229\",\"name\":\"海淀剧院\",\"poiType\":\"休闲娱乐\",\"point\":{\"x\":11632476945179,\"y\":39982622137118},\"tag\":\"休闲娱乐;**院\",\"tel\":\"\",\"uid\":\"edd64ce1a6d799913ee231b3\",\"zip\":\"\"},{\"addr\":\"海淀黄庄地铁站旁\",\"cp\":\"NavInfo\",\"direction\":\"西北\",\"distance\":\"375\",\"name\":\"中发电子市场(中关村大街)\",\"poiType\":\"购物\",\"point\":{\"x\":11632529945204,\"y\":39981537146849},\"tag\":\"购物;家电数码\",\"tel\":\"\",\"uid\":\"69130523db34c811725e8047\",\"zip\":\"\"},{\"addr\":\"北京市海淀区知春路128号\",\"cp\":\"NavInfo\",\"direction\":\"西北\",\"distance\":\"434\",\"name\":\"泛亚大厦\",\"poiType\":\"房地产\",\"point\":{\"x\":11632600013033,\"y\":39981516414381},\"tag\":\"房地产;写字楼\",\"tel\":\"\",\"uid\":\"d24e48ebb9991cc9afee7ade\",\"zip\":\"\"}],\"poiRegions\":[],\"sematic_description\":\"北京远景国际公寓(中关村店)内0米\",\"cityCode\":131}})";

//只保留Json内容

text = textRemove(textLength - 1)Remove(0, 29);

JObject jo = (JObject)NewtonsoftJsonJsonConvertDeserializeObject(text);

//获取指定TAG的内容

MessageBoxShow(jo["result"]["addressComponent"]["district"]ToString());

需要准备的材料分别是:电脑、php编辑器、浏览器。

1、首先,打开php编辑器,新建php文件,例如:indexphp,填充问题基础代码。

2、在indexphp中,输入代码:

$b = json_decode($a);

echo $b->content->location->lat;

echo ',';

echo $b->content->location->lng;

3、浏览器运行indexphp页面,此时lng和lat的值都被打印了出来。

>

我很好奇,不知道key值的情况下取到某一个value值?

那个某一个值是不是已经知道了,为什么还要在json里查找呢?

你是要用某一个值查找对应的key吗?

这里key应该是唯一的,但是值是唯一的吗?

如果值是唯一的,或者只想找到第一个对应的值,那么遍历的时候查找到第一个就可以跳出循环。

如果值不是唯一的,那么需要完整的遍历一遍吧。

你的json格式有点问题,应该是不完整且键名不能相同。

下面我写了个相同的程序,希望能符合你的要求,代码如下:

public class KeysInfo {

        public KeysInfo() { }

        [JsonIgnore]

        public string Test { get; set; }

        public MyKeys[] mykeys{ get; set; }

    }

 

    public class MyKeys

    {

        public string key0{ get; set; }

        public string key1 { get; set; }

        public string key2 { get; set; }

        public string key3 { get; set; }

        public string key4 { get; set; }

        public string key5 { get; set; }

        public string key6 { get; set; }

        public string key7 { get; set; }

    }

    class Program

    {

        static void Main(string[] args)

        {

            string myJson = "{\"Test\":\"2015\",\"MyKeys\":[{\"key0\":\"a\",\"key1\":\"b\",\"key2\":\"c\",\"key3\":\"d\"},{\"key4\":\"aa\",\"key5\":\"bb\",\"key6\":\"cc\",\"key7\":\"dd\"}]}";

            // 反序列化json对象

            KeysInfo des = JsonConvertDeserializeObject<KeysInfo>(myJson);

            if (IsExist(des, "key4", "aa")) ConsoleWriteLine("存在\n");

            else ConsoleWriteLine("不存在\n");

            

            ConsoleReadKey(true);

        }

        public static bool IsExist(KeysInfo keyInfo, string keyName, string keyValue)

        {

            for (int i = 0; i < keyInfomykeysCount(); i++)

            {

                //  反射KeysInfo类的属性以及值

                foreach (SystemReflectionPropertyInfo pi in keyInfomykeys[i]GetType()GetProperties())

                {

                   if (piName == keyName && (piGetValue(keyInfomykeys[i])!=null

                       &&piGetValue(keyInfomykeys[i])ToString() == keyValue))

                       return true;  // 给定的键名与值存在于json对象

                }

            }

            return false; // 给定的键名与值不存在于json对象

        }

    }

使用JSON从后台向前台传输数据的时候,当数据本身含有一些特殊字符,会导致JSON数据的解析出错。

使用下面的方法对即将向前台输出的json字符串进行处理,可以解决键盘上能输入的所有特殊字符问题。

//当文本中含有如下特殊字符时,此方法可以成功处理,让其在前台被正确解析,注意:此法不能处理单引号

public static String stringToJson(String s) {

StringBuffer sb = new StringBuffer ();

for (int i=0; i<slength(); i++) {

char c = scharAt(i);

switch (c) {

case '\"':

sbappend("\\\"");

break;

// case '\\': //如果不处理单引号,可以释放此段代码,若结合下面的方法处理单引号就必须注释掉该段代码

// sbappend("\\\\");

// break;

case '/':

sbappend("\\/");

break;

case '\b': //退格

sbappend("\\b");

break;

case '\f': //走纸换页

sbappend("\\f");

break;

case '\n':

sbappend("\\n"); //换行

break;

case '\r': //回车

sbappend("\\r");

break;

case '\t': //横向跳格

sbappend("\\t");

break;

default:

sbappend(c);

}}

return sbtoString();

}

//注意,下面的方法是在把你的数据文本接入json数据字符串之前使用,预先对文本做处理后在接入JSON字符串

//处理文本中的单引号 和 斜杠

public static String StringDanYinToJSON(String ors) {

ors = ors == null "" : ors;

StringBuffer buffer = new StringBuffer(ors);

int i = 0;

while (i < bufferlength()) {

if (buffercharAt(i) == '\'' || buffercharAt(i) == '\\') {

bufferinsert(i, '\\');

i += 2;

} else {

i++;

}

}

return buffertoString();

}

json中取出对象的属性值步骤如下:

1、打开vscode,创建一个测试页面JsonTesthtml,用于演示在js中如何获取json对象的属性集合。

2、在测试页面中,定义一个js变量,将其赋值为json格式的字符串,用于模拟从后台返回过来的json字符串值,以及后续转换为json对象,和获取其属性集合。var json = "[{\"Col1\": \"Hello\", \"Col2\": \"World\"}, {\"Col1\": \"您好\", \"Col2\": \"世界\"}]"。

3、使用js的eval函数,将json字符串的变量值,转换为json对象。var $json = eval("(" + json + ")");

4、得到json对象之后,使用for-in循环语句,得到json对象的序号,也就是,这个json对象中,还有多少个子对象。

5、因为js是弱类型的语言,并不要求json对象中的每个子对象属性都一样。所以,在得到序号之后,使用Objectkeys($json[i]); 就能获取到当前json子对象的属性集合。

6、如果想要获取到json对象的每个具体的列名和值,就需要再加一个for循环,遍历列名,得到列名和值。

以上就是关于C#语言,从百度地图反向地理编码api返回的json数据中提取信息全部的内容,包括:C#语言,从百度地图反向地理编码api返回的json数据中提取信息、请教php大神,如何提取一个json数据里的某值、用C语言解析JSON数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9590469.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存