小编Wei*_*Hao的帖子

如何检查JavaScript对象是否为JSON

我有一个我需要循环的嵌套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)

javascript json

71
推荐指数
7
解决办法
14万
查看次数

jQuery语法错误:#​​/

我目前正在为我的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#/mainindex.html#/time将加载在我的div一个不同的内容).什么可能导致此错误?

jquery twitter-bootstrap angularjs

24
推荐指数
1
解决办法
2万
查看次数

ElasticSearch使用Java API进行全文搜索

我最近开始探索搜索世界,并尝试使用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"不适用于上面的例子.我究竟做错了什么?

java lucene elasticsearch

8
推荐指数
1
解决办法
1万
查看次数

AngularStrap选项卡加载html片段

我目前正在使用Twitter Bootstrap开发一个AngularJS项目,我正在尝试将我的Bootstrap指令转换为Angular.我决定使用AngularStrap,因为它为Bootstrap-Select提供了支持(我不确定AngularUI是否相同).该标签例如只涵盖静态的HTML虽然.有没有办法通过AngularStrap或AngularJS动态加载html片段,以便只在单击选项卡时调用它?我的html片段也需要执行javascript.

我这样做的理由是双重的.首先,每个选项卡包含相当多的内容,我不希望一次加载所有选项卡,这将减慢加载速度.第二个原因是我更喜欢对我的源代码采用更模块化的方法,而不是将所有内容都放在同一个html文件中.

angularjs angular-strap

8
推荐指数
1
解决办法
1万
查看次数

bootstrap-slider更改最大值

我目前正在使用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直接设置值也不会改变滑块本身的范围,即使该值已更改.任何有关设置最大值或重新初始化滑块的帮助都将非常感激!!

javascript slider twitter-bootstrap

8
推荐指数
2
解决办法
2万
查看次数

Express 4,NodeJS,AngularJS路由

我使用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)

nginx node.js express angularjs express-4

5
推荐指数
1
解决办法
1万
查看次数

在大于当前大小的位置将元素添加到ArrayList中

目前我正在使用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的子类并覆盖一些方法.我当然想知道是否有更优雅的方式这样做.

java data-structures

4
推荐指数
1
解决办法
9299
查看次数

敲除点击绑定上的自定义参数

我目前正在尝试使用自定义参数调用函数,但是我无法访问该参数,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)

knockout-2.0 knockout.js

4
推荐指数
1
解决办法
7531
查看次数

自定义指令模型在ng-switch中不起作用

我正在尝试使用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)

angularjs angularjs-directive

4
推荐指数
1
解决办法
3441
查看次数

使用Knockout Mapping显示嵌套的JSON数据

我试图在嵌套的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实现.

json knockout-mapping-plugin knockout-2.0 knockout.js

3
推荐指数
1
解决办法
6056
查看次数

MongoDB查询的可选参数

假设我有两个事件:

{"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将返回event1event2.目前我正在使用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)

javascript mongodb node.js

3
推荐指数
1
解决办法
4522
查看次数

如何在模板中显示knockoutjs.mapping数据?

使用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中的控制台访问对象,但不知道如何将此日期绑定到我的模板.

knockout-mapping-plugin knockout.js

1
推荐指数
1
解决办法
922
查看次数