城市代码json制作
** 昨天遇到了一个需求,需要通过城市名查找城市天气网代码,网上百度一下,发现大多是以下三种格式。 **
[图1]https://img-blog.csdnimg.cn/20190330155608665.png
[图2]https://img-blog.csdnimg.cn/2019033016005792.png
[图3]https://img-blog.csdnimg.cn/20190330155654622.png
** 很显然,这三种格式都是无法直接使用的,不过我们拥有编程这一手段可以将其转化为json格式,免去了寻找加工工具的麻烦。**
这里以图1的格式为例
String city="北京:101010100朝阳:101010300顺义:101010400怀柔:101010500通州:101010600昌平:101010700延庆:101010800";
- 首先将我们找到的城市代码信息以字符串格式复制到代码中 *
而我们需要的格式是这样的。
- 于是们注意到,开头和末尾都有一个花括号,其次在每一个冒号(:)前后,都存在了一个双引号(“”),所以我们在city,字符前后加上花括号,然后利用string.replace();方法,将冒号替换成双引号加冒号 *
public class Demo {
String city="{\"北京:101010100朝阳:101010300顺义:101010400怀柔:101010500通州:101010600昌平:101010700延庆:101010800\"}";
public Demo(){
city=city.replace(":","\":\"");
System.out.print(city);
}
public static void main(String[] args){
new Demo();
}
}
这里需要注意转义符"“的妙用。
输出结果为:
已经初步相似了。接下来,我们需要将数字和文字用双引号和逗号隔开,例如"101010100朝阳” 要写成 “101010100”,“朝阳” 。
这一步采用string.CharAt();方法。
- 定义一个新的字符串s2,用于继承city中的字符
- 然后依次判断city中的单个字符是否为数字。
- 如果是,则判断其后一位是否为数字,如果不是,说明我们找到了数字和汉字连接的地方,只需要在数字后面加上双引号和逗号即可。然后跳出本次循环,进行下一次循环。
- 否则的话,直接将该位字符连接在s2后面。
public class Demo {
String city="{\"北京:101010100朝阳:101010300顺义:101010400怀柔:101010500通州:101010600昌平:101010700延庆:101010800\"}";
String s2="";
public Demo(){
city=city.replace(":","\":\"");
for(int i=0,l=city.length();i<l;i++){
if(city.charAt(i)>=48&&city.charAt(i)<=57){
if(i+1<l&&!(city.charAt(i+1)>=48&&city.charAt(i+1)<=57)){
s2=s2+city.charAt(i)+"\",\"";
continue;
}
}
s2+=city.charAt(i);
}
System.out.print(s2);
}
public static void main(String[] args){
new Demo();
}
}
- 输出结果为
- 注意剪除字符最后一串数字后面多出的一组双引号和冒号,可以用String.subString();方法,也可以手动剪除。最后将这个字符串放入json格式检验网站检验一下。
检验成功