我有一个我需要循环的嵌套JSON对象,每个键的值可以是String,JSON数组或另一个JSON对象.根据对象的类型,我需要执行不同的操作.有什么方法可以检查对象的类型,看它是String,JSON对象还是JSON数组?
我尝试使用typeof,instanceof但两者似乎都没有工作,因为typeof它将为JSON对象和数组返回一个对象,并instanceof在我这样做时给出错误obj instanceof JSON.
更具体地说,在将JSON解析为JS对象之后,有什么办法可以检查它是普通字符串,还是带有键和值的对象(来自JSON对象),还是数组(来自JSON数组) )?
例如:
JSON
var data = "{'hi':
{'hello':
['hi1','hi2']
},
'hey':'words'
}";
Run Code Online (Sandbox Code Playgroud)
示例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 = parent[key];
}
}
if (parent != undefined) {
var endLength = path.length - 1;
var …Run Code Online (Sandbox Code Playgroud) 我目前正在为我的Web应用程序使用jQuery,Twitter Bootstrap和AngularJS.我一直在尝试做路由,但Syntax error, unrecognized expression: #/time只要我尝试点击时间标签,jQuery就会一直给我,反之亦然.我不知道是哪个导致了这个错误,除了它是由#符号引起的.我广泛搜索但无济于事.这是我的代码:
<ul class="nav nav-tabs">
<li class="active">
<a href="#/main" data-toggle="tab" id="main-tab">Main</a>
</li>
<li>
<a href="#/time" data-toggle="tab" id="time-tab">Time Reports</a>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
我需要保持斜线,因为我用它为我的AngularJS的路由(即index.html#/main和index.html#/time将加载在我的div一个不同的内容).什么可能导致此错误?
我最近开始探索搜索世界,并尝试使用ES作为MongoDB的索引.我成功地将它们集成在一起,但我发现搜索API相当复杂和令人困惑.Java API也没有太大帮助.我能找到完全匹配的内容,但如何进行全文搜索?这是我的代码:
Settings settings = ImmutableSettings.settingsBuilder()
.put("cluster.name", "elasticsearch").build();
Client client = new TransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress("host-ip", 9300));
SearchResponse response = client.prepareSearch("mongoindex")
.setSearchType(SearchType.QUERY_AND_FETCH)
.setQuery(termQuery("name", "*name*"))
.setFrom(0).setSize(60).setExplain(true)
.execute()
.actionGet();
Run Code Online (Sandbox Code Playgroud)
我找到"name":"testname"使用没有问题.setQuery(termQuery("name", "testname")),但"name":"this is a test name"不适用于上面的例子.我究竟做错了什么?
我目前正在使用Twitter Bootstrap开发一个AngularJS项目,我正在尝试将我的Bootstrap指令转换为Angular.我决定使用AngularStrap,因为它为Bootstrap-Select提供了支持(我不确定AngularUI是否相同).该标签例如只涵盖静态的HTML虽然.有没有办法通过AngularStrap或AngularJS动态加载html片段,以便只在单击选项卡时调用它?我的html片段也需要执行javascript.
我这样做的理由是双重的.首先,每个选项卡包含相当多的内容,我不希望一次加载所有选项卡,这将减慢加载速度.第二个原因是我更喜欢对我的源代码采用更模块化的方法,而不是将所有内容都放在同一个html文件中.
我目前正在使用Twitter bootstrap-slider库,并且一直试图弄清楚如何在初始化滑块后更改最大值.关于如何检索值的这个问题有一些帮助,但我仍然找不到确切的调用方法.这是我到目前为止所尝试的内容:
JS:
$('#slider').slider({
max: 100
});
$('#slider').slider({
max: 200
});
console.log($('#slider').data('slider').max)
Run Code Online (Sandbox Code Playgroud)
安慰:
100
Run Code Online (Sandbox Code Playgroud)
$('#slider').data('slider').max直接设置值也不会改变滑块本身的范围,即使该值已更改.任何有关设置最大值或重新初始化滑块的帮助都将非常感激!!
我使用Express 4在我的后端托管我的AngularJS应用程序,Nginx作为我的前端服务器.但是html5模式似乎不起作用,因为当我尝试http://localhost/login通过浏览器输入页面链接(例如)时,我将收到Can not/GET错误.我需要为Express/Nginx做任何路由配置吗?这是我的配置代码:
快递4:
var express = require('express'),
app = express(),
server = require('http').Server(app),
bodyParser = require('body-parser'),
db = require('./db'),
io = require('./sockets').listen(server),
apiRoutes = require('./routes/api'),
webRoutes = require('./routes/web');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
app.use('/api', apiRoutes);
app.use(express.static(__dirname + '/public'));
server.listen(3000, function() {
console.log('Listening on port %d', server.address().port);
});
Run Code Online (Sandbox Code Playgroud)
AngularJS:
'use strict';
var nodeApp = angular.module('nodeApp',['ngRoute']);
nodeApp.config(function($routeProvider, $locationProvider, $controllerProvider) {
$routeProvider.when('/', {
templateUrl: 'partials/home.html'
}).when('/login', {
templateUrl: 'partials/login.html'
});
$locationProvider.html5Mode(true);
nodeApp.controllerProvider = $controllerProvider;
});
Run Code Online (Sandbox Code Playgroud)
Nginx的:
# the IP(s) on …Run Code Online (Sandbox Code Playgroud) 目前我正在使用ArrayList来存储元素列表,因此我需要在特定位置插入新元素.我需要在大于当前大小的位置输入元素.例如:
ArrayList<String> arr = new ArrayList<String>();
arr.add(3,"hi");
Run Code Online (Sandbox Code Playgroud)
现在我已经知道会有一个OutOfBoundsException.还有其他方式或其他对象我可以在保持订单的同时做到这一点吗?这是因为我有方法根据索引查找元素.例如:
ArrayList<String> arr = new ArrayList<String>();
arr.add("hi");
arr.add(0,"hello");
Run Code Online (Sandbox Code Playgroud)
我希望现在在索引1而不是索引0处找到"hi".
总而言之,如果没有手动将null插入到中间的元素中,有没有办法满足这两个要求:
我看过Java ArrayList添加当前大小以外的项目,以及HashMap,但HashMap不满足我的第二个标准.任何帮助将不胜感激.
PS Performance现在不是一个真正的问题.
UPDATE:已经有关于我为什么有这些特定要求的一些问题,那是因为我工作的经营转型,在那里我将一组操作成,比方说,我的名单(数学公式).每个操作都包含一个字符串 当我在列表中插入/删除字符串时,我将通过跟踪已经应用的每个操作来动态更新未应用的操作(如果需要).我现在的解决方案是使用ArrayList的子类并覆盖一些方法.我当然想知道是否有更优雅的方式这样做.
我目前正在尝试使用自定义参数调用函数,但是我无法访问该参数,observable()而是返回了一个对象.基本上我要做的是检索列表中该特定元素的索引.有人能指出我如何做到正确的方向吗?
HTML:
<div id="formula">
<b>Formula</b><br/>
<!-- ko foreach: formula -->
<span data-bind="text: $data, attr: {name: $index}, click: $parent.convert.bind($data,$index)"></span><br/>
<!-- /ko -->
</div>
Run Code Online (Sandbox Code Playgroud)
使用Javascript:
var ListModel = function(formula) {
var self = this;
self.formula = ko.observableArray(formula);
self.convert = function(index) {
alert(index); //this should show the index of the clicked element
}
};
listModel = new ListModel(formula);
ko.applyBindings(listModel);
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用AngularJS来提供一个可切换的下拉列表,其中各种选项的选择将触发不同的列表.ng-switch看起来是正确的方式,但我的内心ng-model并没有约束力ng-switch.如果我不使用绑定工作正常ng-switch,但如果是这种情况我不知道如何切换我的下拉列表.这可能是什么问题?
jsFiddle:http://jsfiddle.net/tanweihao88/LUzXT/3/
HTML:
<select ng-model="periodRangeModel" ng-options="item for item in items"></select>
<div ng-switch on="periodRangeModel">
<span ng-switch-when="Month"><period-selector items="monthOptions" ng-model="periodModel"></period-selector></span>
<span ng-switch-when="Quarter"><period-selector items="quarterOptions" ng-model="periodModel"></period-selector></span>
<br>
</div>
Run Code Online (Sandbox Code Playgroud)
JS:
angular.module('myApp', [])
.controller("MyCtrl", function($scope) {
$scope.items = ['Month', 'Quarter'];
$scope.periodRangeModel = "Month";
$scope.quarterOptions = ["Jan-Mar", "Apr-Jun", "Jul-Sept", "Oct-Dec"];
$scope.monthOptions = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
$scope.periodModel = $scope.monthOptions[0];
})
.directive('periodSelector', function() {
return {
restrict: 'E',
replace: true, …Run Code Online (Sandbox Code Playgroud) 我试图在嵌套的JSON对象上使用Knockout的映射插件,里面有可变数据.但是,我不确定如何在HTML中显示它.如何正确映射所有嵌套的JSON对象并将其显示为简单的字符串?这是我的代码:
JS
var ListModel = function(jsonData) {
var self = this;
self.master = ko.mapping.fromJS(jsonData);
}
var listModel = new ListModel(jsonData);
ko.applyBindings(listModel);
Run Code Online (Sandbox Code Playgroud)
HTML
<!-- ko foreach: master -->
<div data-bind="text: $data"></div>
<!-- /ko -->
Run Code Online (Sandbox Code Playgroud)
示例JSON
{"Level 1a":"Hi","Level 1b":{
"Level 2a":"Hello","Level 2b":{
"Level 3":"Bye"}
}
}
Run Code Online (Sandbox Code Playgroud)
样本输出
Hi
Hello
Bye
Run Code Online (Sandbox Code Playgroud)
我在这里要做的主要是打印出所有嵌套级别的值.关键值和嵌套级别的数量是完全可变的(我在SO和在线上找到的大多数嵌套JSON示例都是固定密钥).这可能吗?
更新:我发现jQuery等价,但我仍然需要针对observable的Knockout实现.
假设我有两个事件:
{"id":1, "name":"event1"},
{"id":2, "name":"event2"}
Run Code Online (Sandbox Code Playgroud)
我正在编写一个REST API来检索事件.此API采用可选参数,id如果存在,则仅返回特定于该id的事件,并返回所有事件(如果为null).
所以api/events?id=1应该event1只返回,而api/events将返回event1和event2.目前我正在使用if-else语句,但如果我有更多可选参数,这显然是不可扩展的.有没有办法将此表达为MongoDB查询?
码:
app.get('/api/events', function (req, res) {
var _get = url.parse(req.url, true).query,
eventCollection = db.collection('events');
// Parameters passed in URL
var page = (_get.page) ? _get.page * 10 : 0,
org_id = (_get.org_id) ? parseInt(_get.org_id) : "";
if (org_id == "") {
eventCollection.find({
}, {
limit: 10,
skip: page
}).toArray(function(err, events) {
if (!err) {
res.json(
events
);
}
});
} …Run Code Online (Sandbox Code Playgroud) 使用knockout的映射插件,我将如何在我的模板中显示JSON对象的信息和数组.
//Example JSON data.
JSON = [{'title':'title of first object',
'content':'content of first json object'},
{'title':'title of second object', 'content': 'content of second json object'}]
var viewModel = ko.mapping.fromJS(data);
var data = $.getJSON('/post/.json', function(data) {
ko.mapping.fromJS(data, viewModel);
});
Run Code Online (Sandbox Code Playgroud)
我可以通过viewModel()和viewModel()[0] .title()使用Chrome中的控制台访问对象,但不知道如何将此日期绑定到我的模板.
angularjs ×4
javascript ×3
knockout.js ×3
java ×2
json ×2
knockout-2.0 ×2
node.js ×2
express ×1
express-4 ×1
jquery ×1
lucene ×1
mongodb ×1
nginx ×1
slider ×1